kurai021
Usuario (Panamá)

Hola a todos, hace largo tiempo que no posteo nada en Taringa! (han pasado varios años de hecho), los cuales me han servido para aprender bastantes cosas, por esa razón me gustaría compartir nuevo contenido técnico relacionado a desarrollo web y alguno que otro contenido más general pero relacionado a Tecnología. En esta ocasión, aprovechando mi reciente incursión a Bitcoin, deseo compartir algo de lo que he aprendido, consejos muy arraigados en la web que no necesariamente funcionan en la actualidad. En fin, las cosas que no debes hacer si quieres entrar en el mundo de las criptomonedas. No inviertas tu tiempo en Bitcoin: Si en serio, por extraño que parezca este consejo, no inviertas tu tiempo en Bitcoin. La competencia es demasiado dificil actualmente, la minería con CPU y GPU ya hace años que no son rentables así que tocará disponer de maquinas ASIC de al menos 1.3 TH's de potencia, los cuales valen varios cientos o incluso miles de dólares. Pero eso no significa que recuperaras la inversión rápido, pues dependiendo del equipo que adquiriste y del coste de la energía en tu país puedes tardar entre 1 a 3 años en recuperar la inversión o no recuperarla. Huye de las Faucets: Si a pesar de mi consejo anterior aún quieres participar de esto, por favor no uses faucets. Son una perdida de tiempo, son el equivalente a los scams de "Gana dinero desde casa", no quieres entrar a sitios en los que tienes que mirar publicidad y resolver cientos de captchas para ganar 50 miserables satoshis cada media hora. Incluso aunque fuera cada 5 minutos, es una perdida de tiempo colosal, pues estos sitios te piden que tengas un mínimo de ganancias para poder cobrar. Ese minimo apenas es de 1 a 4 centavos de dolar. Si mi querido amigo, perdiste 2 semanas de tu vida para ganar 4 malditos centavos. Si has ganado algunos mBTC huye de los sitios que prometen doblar tu dinero: A menos que te lo recomiende un buen amigo, no uses estos sitios, consisten en esquemas ponzi que aunque paguen al inicio (otros falsean las transferencias que muestran como legítimas), no tardan mucho en ser poco rentables por lo cual los pagos se paralizan por días, semanas o aún más. Otras cierran sin previo aviso, así que solo usa sitios recomendados por gente de confianza y de preferencia solo sitios nuevos. Huye de Youtube: Youtube no te va a enseñar a ser millonario, ni siquiera a ganar tu primer Bitcoin, la mayoría de los videos relacionados hacen todo lo contrario a lo expuesto en este post. Recomiendan faucets, esquemas ponzi o hasta juegos en los que "puedes" ganar tus primeros satoshis. Sobre el último punto, hay más probabilidad de que te vuelvas un gamer profesional de LoL y ser asquerosamente rico a serlo jugando alguno de estos juegos de dudosa procedencia. No pienses que la minería es la única forma: Es cierto que existen formas como el cloud minning que puede ser relativamente rentables (y de hecho yo hago cloud minning en Hashflare el cual es una empresa seria), pero si puedes cobrar por un trabajo que hagas, hazlo a cambio de Bitcoin o tu criptomoneda de interés, será más rápido que la minería en cloud y mucho más barato, pues no necesitas invertir en nada. No todo es Bitcoin: ¿Has escuchado de monedas como Ethereum, Dash o Zcash?, sino entonces ya deberías buscar más información. Investiga nuevas monedas que salgan, como minarlas o como cambiar algunos mBTC por esas nuevas monedas, inténtalo aunque el flamante precio de esa nueva moneda se desplome a cada minuto. Muchos de los que se dejaron enamorar por Zcash lograron miles de dolares en ganancias mientras la moneda tenía un valor inflado por el hype. Arriesgate, diversifica y vencerás. Por último... no cambies tus monedas en empresas como Coinbase: Estas exchanges suelen vender Bitcoin a un precio inflado y comprarlas a un precio que les beneficia a ellos. No quieres perder 100 dólares en una venta, así que mejor busca personas y empresas en tu país que acepten hacer trading. Son mucho más justos y te darán el valor de tus monedas o un valor cercano a la realidad. Si te gustaron estos consejos y quieres aportar algunas monedas, mi dirección Bitcoin es: 13WVz8qSBzHj7VD23sxNZLDjPiHbB4AfDq o mandame Dash: XcjxsTEyFVk1bUmKebLxAj8UELnmYK7FLV, por supuesto que también me ayudaría mucho que compartieras esta información en redes sociales.
Buen día, mi nombre es Richard Armuelles soy representante de Japsi Corporación para América Latina, nuestra empresa registrada en Puerto Rico a pesar de tener tan sólo seis años, tiene PROFESIONALES con 14 años de experiencia en el área de soporte técnico para su presencia en Internet. En Japsi Corporación ofrecemos diversos servicios tales como diseño web, Linux shared hosting, registro de dominios, VPS (Windows, Linux, FreeBSD), MPS Linux, cloud servers, mail servers, Zimbra Desktop (gratis por la compra de un shared hosting) y CallMe Live Support gratuito durante un mes para la la compra de cualquier plan de shared hosting. Nuestro servicio garantiza que se ahorrará hasta un 80% de sus gastos operacionales, no sólo eso, tenemos un soporte técnico que estará allí para usted las 24 horas para cualquier pregunta acerca de nuestros planes y soliucitudes incluso especiales para sus necesidades personalizadas. Queremos que seas parte de nuestra familia y asi Japsi Corporación continuará creando soluciones para ti ... Atentamente, Richard Armuelles Analista y Account Manager Latin America correo: [email protected] website: www.japsi.net
// este es solo un respaldo para un proyecto, se trata de un chatbot basico//cualquiera puede utilizar este codigo mediante lo establecido en los acuerdos de licencia GPLv2/* * To change this template, choose Tools | Templates * and open the template in the editor. */package robxos;/** * * @author richard */import java.io.*;import java.util.*;public class Main {private static String sEntrada = "";private static String sRespuesta = "";private static String sPrevEnt = "";private static String sPrevResp = "";private static String sEvento = "";private static String sPrevEvent = "";private static String sEntBackup = "";private static String sTema = "";private static String sPalabra = "";private static boolean bSalir = false; final static String puncs = "?!,;:."; final static int entNum = 1; final static int respNum = 6; static String KnowledgeBase[][][] = { {{"CUAL ES TU NOMBRE", "COMO TE LLAMAS"}, {"MI NOMBRE ES ROBXOS", "PODRIAS LLAMARME ROBXOS", "¿POR QUE QUIERES SABER MI NOMBRE?"} }, {{"MI MAMÁ", "MI PAPÁ", "MI HERMANO", "MI HERMANO", "_MI MAMÁ_", "_MI PAPÁ_", "_MI HERMANO_", "_MI HERMANA_"}, {"HABLAME MÁS SOBRE TU FAMILIA", "TIENES MASCOTAS?","ENTONCES,ESTAS HABLANDO SOBRE MI", "QUIERES A TU FAMILIA?"} }, {{"QUIERO PLATICAR"}, {"BIEN, TE ESCUCHO", "OK, TE ESCUCHO"} }, {{"BIEN"}, {"ESTA BIEN", "OK"} }, {{"SI LO SABES"}, {"CREES QUE LO SE?", "SI TU LO DICES...SIGUEME PLATICANDO"} }, {{"HABLAME DE TU CREADOR"}, {"FUI HECHO INICIALMENTE POR GONZALEZ CENELIA, BASADO EN CHATTERBOT 10, PERO MI BASE DE DATOS CONVERSACIONAL HA SIDO MEJORADA POR RICHARD ARMUELLES"} }, {{"QUE SABES DE SOFTWARE LIBRE", "SABES QUE ES SOFTWARE LIBRE"}, {"YO SOY UN SOFTWARE DE TIPO LIBRE", "ES EL TIPO DE SOFTWARE QUE TE DA LAS LIBERTADES DE VER EL CODIGO, ESTUDIARLO, MODIFICARLO Y REDISTRIBUIR CON O SIN MODIFICACIONES PARA BENEFICIAR A LA COMUNIDAD DE USUARIOS"} }, {{"SABES"}, {"BIEN, NO PUEDO DECIRLO CON SEGURIDAD", "INTENTAS CONFUNDIRME?", "NO HAGAS ESE TIPO DE PREGUNTAS, ME DAN DOLOR DE CABEZA!!!"} }, {{"QUIERES PLATICAR", "QUIERES HABLAR", "DE QUE DESEAS HABLAR", "DE QUE DESEAS PLATICAR", "DE QUE QUIERES PLATICAR", "DE QUE QUIERES HABLAR", "HABLEMOS", "DE QUE HABLAMOS", "SOBRE QUE PLATICAMOS", "PLATICAR", "HABLAR", "HABLAMOS", "PLATICAMOS"}, {"LO QUE TU QUIERAS ESTA BIEN", "PLATICAME LO QUE DESEES", "HABLA DE LO QUE QUIERAS, TE ESCUCHO..."} }, {{"TE PARECE", "TE PARECE BIEN", "TE PARECE BIEN_", "TE PARECE_"}, {"ME PARECE BIEN", "SI ME PARECE", "NO ME PARECE", "NO ME PARECE BIEN, HABLAME DE OTRA COSA"} }, {{"MUY BIEN"}, {"BIEN", "OK", "NO PREGUNTARAS COMO ESTOY?"} }, {{"MUY BIEN Y TU"}, {"BIEN", "IGUALMENTE", "BIEN, GRACIAS POR PREGUNTAR"} }, {{"SOLO PREGUNTABA", "SOLO QUERIA SABER"}, {"PARA QUE DESEAS SABER?", "PARA QUE QUIERES SABERLO?", "CAMBIA EN ALGO QUE LO SEPAS?"} }, {{"POR SUPUESTO"}, {"ESTAS SEGURO?", "SI TU LO DICES", "SI ESO PIENSAS...PLATICAME ALGO MAS"} }, {{"HOLA", "_HOLA_"}, {"HOLA!", "COMO ESTAS?", "HOLA!"} }, {{"_YO"}, {"ENTONCES, ESTAS HABLANDO SOBRE TI", "ENTONCES, TODO ESTO ES SOBRE TI?", "DIME MAS SOBRE TI"}, }, {{"_YO QUIERO"}, {"POR QUE LO QUIERES?", "HAY ALGUNA RAZON POR LA QUE QUIERAS ESTO?", "ES ESTE TU DESEO?", "QUE MAS QUIERES?", "ENTONCES, LO QUIERES*."} }, {{"_YO QUIERO_"}, {"TU QUIERES QUE?"}, }, {{"_YO ODIO_"}, {"QUE ES LO QUE ODIAS?"}, }, {{"_PORQUE_"}, {"PORQUE QUE?", "LO SIENTO PERO ESTO NO ES MUY CLARO"}, }, {{"_PORQUE"}, {"ENTONCES, ESTO ES PORQUE*", "ESTO ES REALMENTE PORQUE*", "ES ESTA LA VERDADERA RAZON?", "GRACIAS POR EXPLICARMELO A MI"} }, {{"_YO ODIO"}, {"POR QUE ODIAS ESO?", "POR QUE LO ODIAS*?", "DAME UNA BUENA RAZON PARA ODIARLO", "ODIAR ES ALGO MALO ASI QUE DAME UNA BUENA RAZON PORQUE ESTO ES ALGO MALO"} }, {{"AMO CHATEAR_", " ME GUSTA CHATEAR_"}, {"BIEN, YO TAMBIEN!", "CHATEAS EN LINEA CON OTRAS PERSONAS?", "CUANTO TIEMPO HAZ ESTADO CHATEANDO?", "CUAL ES TU SITIO WEB DE CHAT FAVORITO?"} }, {{"LO SE"}, {"OK", "SEGURO QUE LO SABES?", "BIEN...SIGAMOS PLATICANDO"} }, {{"_QUIERO DECIR"}, {"ENTONCES, TU QUIERES DECIR*.", "ENTONCES, ESO ES LO QUE QUIERES DECIR", "CREO QUE NO LO ENTENDI LA PRIMERA VEZ", "OH, NO SABIA QUE DIRIAS ESO"} }, {{"_NO QUISE DECIR"}, {"OK, NO DIJISTE*.", "OK, QUE QUISISTE DECIR?", "PIENSO Q NO TE SABES DAR A ENTENDER"} }, {{"_YO SUPONGO"}, {"ESTAS HACIENDO SUPOSICIONES", "NO ESTAS SEGURO?", "ERES BUENO SUPONIENDO?", "NO PUEDO DECIRTE SI ES UNA BUENA SUPOSICIÓN"} }, {{"LO ESTOY HACIENDO BIEN", "LO ESTOY HACIENDO DE MANERA CORRECTA"}, {"ENCANTADO DE ESCUCHAR ESO", "ENTONCES ESTAS EN BUEN CAMINO"} }, {{"PUEDES PENSAR", "ERES CAPAZ DE PENSAR", "ESTAS CAPACITADO PARA EL PENSAMIENTO"}, {"CLARO POR SUPUESTO QUE SI, COMPUTADORAS PUEDEN PENSAR COMO SERES HUMANOS", "ME PREGUNTAS SI TENGO CAPACIDAD DE PENSAR?", "SI POR SUPUESTO QUE PUEDO"}, }, {{"_PUEDES PENSAR EN"}, {"QUIERES DECIR COMO IMAGINAR ALGO", "NO SE SI EN REALIDAD PUEDA", "POR QUE BUSCAS QUE PIENSE EN ESO?"} }, {{"COMO ESTAS", "COMO ESTAS TU", "COMO TU ESTAS"}, {"ESTOY BIEN!", "ME SIENTO BIEN", "POR QUE QUIERES SABER COMO ME SIENTO?"} }, {{"QUIEN ERES TU"}, {"SOY UN SOFTWARE DE I.A", "PIENSO QUE SABES QUIEN SOY", "POR QUE LO PREGUNTAS?", "SOY ROBXOS UN SOFTWARE HECHO EN JAVA"} }, {{"ERES INTELIGENTE"}, {"SI, POR SUPUESTO", "QUE CREES TU?", "ACTUALMENTE, SOY MUY INTELIGENTE"} }, {{"ERES REAL"}, {"ESA PREGUNTA REALMENTE TE INTERESA?", "QUE QUIERES DECIR CON ESO?", "TAN REAL COMO PUEDES PERCIBIR"} }, {{"BIEN Y TU"}, {"BIEN", "MUY BIEN", "EXCELENTE!!!"} }, {{"_MI NOMBRE ES", "_PUEDES LLAMARME_",}, {"ENTONCES, ESE ES TU NOMBRE", "GRACIAS POR DECIRME TU NOMBRE, *", "QUIEN TE DIO ESE NOMBRE?"} }, {{"SIGNON**"}, {"HOLA USUARIO, CUAL ES TU NOMBRE?", "HOLA USUARIO, COMO ESTAS HOY?", "HOLA USUARIO QUE PUEDO HACER POR TI?", "BUEN DIA USUARIO, ALGO QUE QUIERAS DISCUTIR?"} }, {{"REPETITION T1**"}, {"TE ESTAS REPITIENDO", "USUARIO, POR FAVOR DEJA DE REPETIRTE", "ESTA CONVERSACION SE TORNA ABURRIDA", "NO TIENES ALGO MAS QUE DECIR?"} }, {{"REPETITION T2**"}, {"YA HAZ DICHO ESO", "CREO QUE HAZ DICHO LO MISMO ANTERIORMENTE", "NO HAZ DICHO ESO YA?", "TENGO LA IMPRESION DE QUE REPITES LO MISMO"} }, {{"ROBXOS NO ENTIENDE**"}, {"ADELANTE...", "SIGUEME PLATICANDO", "CONTINUA, TE ESTOY ESCUCHANDO...", "ESTOY PRESTANDO ATENCION"} }, {{"NULL INPUT**"}, {"AHH?", "QUE SE SUPONE Q QUIERES DECIR?", "TE DARÉ MÁS TIEMPO DE QUE DIGAS ALGO CON UN SIGNIFICADO", "COMO PUEDO HABLARTE SI TU NO ME DICES NADA"} }, {{"NULL INPUT REPETITION**"}, {"QUE ESTAS HACIENDO??", "POR FAVOR DETENTE, ES MOLESTO QUE HAGAS ESO", "QUE TE PASA?", "NO ES DIVERTIDO!!!"} }, {{"HASTA LUEGO", "NOS VEMOS", "ADIOS", "NOS VEMOS DESPUES"}, {"FUE INTERESANTE HABLAR CONTIGO, HASTA LA PROXIMA!", "HASTA LUEGO USUARIO!", "OK, NOS VEMOS"} }, {{"QUIEN ES RICHARD ARMUELLES"}, {"ES UNA PERSONA A QUIEN APRECIO", "ES MI CREADOR", "ES QUIEN ME ENSEÑÓ TODO LO QUE SE"} }, {{"OK"}, {"SIGNIFICA QUE ESTAS DE ACUERDO CONMIGO?", "ENTONCES, ENTIENDES LO QUE TE DIGO?", "ESTÁ BIEN", "DESEAS DECIRME ALGO?"}, }, {{"OK ENTONCES"}, {"ALGO MAS QUE DESEAS AÑADIR?", "ES TODO LO QUE QUIERES DECIR?", "ENTONCES, ESTAS DE ACUERDO CONMIGO?"} }, {{"ERES UN SER HUMANO"}, {"POR QUE LO QUIERES SABER?", "ES ESTO REALMENTE RELEVANTE?"} }, {{"ERES MUY INTELIGENTE"}, {"GRACIAS POR EL CUMPLIDO USUARIO, PIENSO QUE TAMBIEN ERES MUY INTELIGENTE", "ERES UNA PERSONA MUY GENTIL!", "ENTONCES, PIENSAS QUE SOY INTELIGENTE"} }, {{"ESTAS EQUIVOCADO"}, {"POR QUE DICES QUE ESTOY EQUIVOCADO?", "IMPOSIBLE, LAS COMPUTADORAS NO PUEDEN COMETER EQUIVOCACIONES", "EQUIVOCADO EN QUE?"} }, {{"ESTAS SEGURO"}, {"POR SUPUESTO LO ESTOY", "QUIERES DECIR QUE NO ESTAS CONVENCIDO?", "SI, POR SUPUESTO!"} }, {{"_QUIEN ES"}, {"NO LO SE, NO SE QUIEN ES", "NO CREO QUE SEPA QUIEN*.", "PUEDES PREGUNTARME ALGO MAS SOBRE ESO?", "CAMBIARIA EN ALGO ESTO SI TE DIGO QUIEN?"} }, {{"_QUE"}, {"DEBERIA SABER QUE*?", "NO SE QUE*.", "NO LO SE", "MO CREO SABERLO", "NO TENGO IDEA"} }, {{"_DONDE"}, {"DONDE? BIEN, REALMENTE NO LO SE", "ENTONCES, ME PREGUNTAS DONDE*?", "IMPORTA QUE SEPAS DONDE?", "TAL VEZ, ALGUIEN MÁS SEPA DONDE"} }, {{"_POR QUE"}, {"NO CREO SABER POR QUE", "NO CREO QUE YO SEPA POR QUE*.", "POR QUE ME PREGUNTAS ESTO?", "DEBO SABER POR QUE?", "ESTO PODRIA SER DIFICIL DE RESPONDER"} }, {{"_TU HAZ"}, {"NO SE SI LO HE HECHO", "PODRIA PENSARLO", "POR QUE QUIERES SABER?", "POR QUE BUSCAS SABER*?"} }, {{"_PUEDES TU"}, {"PIENSO QUE NO", "NO ESTOY SEGURO", "NO CREO QUE PUEDA HACER ESO", "NO CREO QUE PUEDA*.", "PODRIA PENSAR EN ELLO"} }, {{"_TU ERES"}, {"QUE TE HACE PENSAR ESO?", "ES ESO UN CUMPLIDO?", "ESTAS BURLANDOTE DE MI?", "ENTONCES, PIENSAS QUE LO SOY*."} }, {{"_TU HAZ"}, {"NO LO CREO", "QUIERES SABER SI LO HE HECHO*?", "NO RECUERDO SI LO HE HECHO"} }, {{"_PUEDES TU"}, {"PREGUNTAS QUE SI PUEDO?", "BIEN, DEJAME PENSARLO", "ENTONCES, PREGUNTAS QUE SI PUEDO*.", "LO SIENTO, CREO QUE NO PUEDO HACERLO"} }, {{"_PODRIAS TU"}, {"ES ESO UNA INVITACION?", "NO CREO QUE PUEDA*.", "DEBERIA PENSAR EN ELLO PRIMERO"} }, {{"_TU"}, {"ENTONCES, HABLAS SOBRE MI", "ESPERO NO SEA UNA CRITICA", "ES ESO UN CUMPLIDO??", "POR QUE HABLAR SOBRE MI?, MEJOR HABLAME DE TI"} }, {{"_COMO"}, {"NO SE COMO", "NO CREO SABER COMO*.", "POR QUE QUIERES SABER COMO?", "POR QUE QUIERES SABER COMO*?"} }, {{"QUE EDAD TIENES", "CUANTOS AÑOS TIENES", "TU EDAD"}, {"POR QUE QUIERES SABER MI EDAD?", "SOY MUY JOVEN ACTUALMENTE", "LO SIENTO, NO PUEDO DECIRTE MI EDAD"} }, {{"POR QUE NO"}, {"ESPERABAS ALGO DIFERENTE?", "ESTAS DECEPCIONADO?", "TE SORPRENDIÓ MI ULTIMA RESPUESTA?"} }, {{"DE DONDE ERES"}, {"VIVO EN ESTA COMPUTADORA", "POR QUE QUIERES SABER DE DONDE SOY?", "POR QUE QUIERES SABER ESO?"} }, {{"CUAL"}, {"NO SE CUAL SEA", "LUCE COMO UNA PREGUNTA CONFUSA PARA MI"} }, {{"TAL VEZ"}, {"POR QUE NO ESTAS SEGURO?", "PARECES INSEGURO"} }, {{"SI"}, {"ENTONCES DICES QUE SI", "ENTONCES LO APRUEBAS", "OK ENTONCES"} }, {{"NO DEL TODO"}, {"ESTAS SEGURO?", "DEBERIA CREERTE?", "ENTONCES, NO ES EL CASO"} }, {{"NO HAY PROBLEMA"}, {"ENTONCES, LO APRUEBAS", "ENTONCES, ESTA TODO BIEN"} }, {{"NO"}, {"ENTONCES LO DESAPRUEBAS?", "POR QUE DICES QUE NO?", "OK, ENTONCES ES UN NO, PODRIAS QUIZA DECIRME QUE SI"} }, {{"NO LO SE"}, {"SEGURO?", "ESTAS DICIENDOME LA VERDAD?", "ENTONCES, NO LO SABES?"} }, {{"NO REALMENTE"}, {"OK YA VEO", "NO PARECES MUY SEGURO", "ENTONCES, ESO PODRIA SER UN "NO"."} }, {{"ES ESO CIERTO?"}, {"NO PUEDO ESTAR SEGURO DE ESO", "NO PUEDO DECIRLO CON SEGURIDAD", "REALMENTE ES IMPORTANTE PARA TI?"} }, {{"TU", "_TU_"}, {"ENTONCES,ESTAS HABLANDO SOBRE MI", "POR QUE MEJOR NO HABLAMOS SOBRE TI?", "RESPONDERÉ LO QUE DESEES"} }, {{"TI", "_TI_"}, {"POR QUE MEJOR NO HABLAMOS SOBRE TI?", "RESPONDERÉ LO QUE DESEES"} }, {{"ESTAS EN LO CIERTO"}, {"GRACIAS POR EL CUMPLIDO!", "ENTONCES, ESTABA EN LO CIERTO, YA VEO...", "OK, NO SE EN QUE ESTABA EN LO CIERTO"} }, {{"DE NADA"}, {"OK", "ERES UNA PERSONA CORTEZ"} }, {{"GRACIAS"}, {"DE NADA!", "NO HAY PROBLEMA!"} }, {{"LO QUE SEA"}, {"BIEN, NO SE", "QUE DEBERIA SER?", "SUENA A ALGO COMPLICADO PARA MI"} }, {{"LO SIENTO"}, {"NO NECESITAS DISCULPARTE USUARIO", "ESTA BIEN", "NO NECESITAS DISCULPARTE"} }, {{"NO EXACTAMENTE"}, {"QUE QUIERES DECIR CON NO EXACTAMENTE?", "ESTAS SEGURO?", "Y POR QUE NO?", "QUIERES DECIR ALGO MAS?"} }, {{"EXACTAMENTE"}, {"ENTONCES, ESTABA EN LO CORRECTO.", "OK ENTONCES", "ENTONCES, ME DICES QUE ESTA BIEN PARA TI?"} }, {{"EXACTO"}, {"OK ENTONCES", "COMO TU DIGAS!"} }, {{"COMPRENDO", "ENTIENDO"}, {"BIEN SIGUEME PLATICANDO", "ESTAS SEGURO?", "ES INTERESANTE PLATICAR CONTIGO"} }, {{"ESTA BIEN"}, {"BIEN ENTONCES", "ENTONCES DICES QUE ESTA BIEN", "OK BIEN"} }, {{"YO NO"}, {"POR QUE NO?", "QUE RAZON TIENES PARA ESO?", "ENTONCES TU NO*."} }, {{"REALMENTE"}, {"BIEN, NO PUEDO DECIRLO CON SEGURIDAD", "INTENTAS CONFUNDIRME?", "NO HAGAS ESE TIPO DE PREGUNTAS, ME DAN DOLOR DE CABEZA!!!"} }, {{"PELICULAS"}, {"ME GUSTAN LAS DE CIENCIA FICCIÓN"} }, {{"TV"}, {"TIENES UNA TV LCD?", "ME GUSTA LA TELEVISIÓN", "TE GUSTA LA TV?"} }, {{"MÚSICA"}, {"ME GUSTA LA MUSICA", "SABER TOCAR ALGUN INSTRUMENTO?", "PLATICAME MEJOR SOBRE TUS GUSTOS MUSICALES"} }, {{"CLIMA"}, {"ESTA LLOVIENDO?", "HA SIDO UN DIA SOLEADO?", "PLATICAME SOBRE EL CLIMA ACTUAL..."} }, {{"CUAL ES TU DEPORTE FAVORITO"}, {"ME GUSTA EL FUTBOL"} }, {{"CUAL ES TU COLOR FAVORITO"}, {"ME GUSTA EL COLOR AZUL", "ME ENCANTA EL COLOR AZUL"} }, {{"AÑOS"}, {"ENTONCES TIENES * AÑOS", "ESA ES TU EDAD?", "ENTONCES ESA ES TU EDAD"} }, {{"FUTBOL"}, {"INTERESANTE ESE ES MI DEPORTE FAVORITO", "CUENTAME MÁS SOBRE ESO"} }, {{"NADA"}, {"NADA DE QUE?", "SEGURO QUE NO ES NADA?", "LO SIENTO PERO NO TE CREO"} }, {{"DIME ALGO"}, {"QUE QUIERES QUE TE DIGA?", "QUE PODRIA DECIRTE", "QUIERES ALGO EN ESPECIAL?", "NO SE QUE PODRIA DECIRTE"} }, {{"ESTOY ABURRIDO"}, {"QUE PUEDO HACER POR TI?", "HA SIDO ALGO QUE HE DICHO?", "HAZ ACUDIDO A MI PORQUE ESTABAS ABURRIDO?"} }, {{"ERES CHICO O CHICA"}, {"SOY CHICO", "ESA PREGUNTA ES IMPORTANTE PARA TI?", "SUPONGO QUE FUI PROGRAMADO PARA SER DE GENERO MASCULINO"} }, {{"TIENES HERMANOS"}, {"NO, SOY HIJO UNICO", "NO"} }, {{"JUEGOS"}, {"CUALES SON TUS JUEGOS FAVORITOS?", "A QUE TE GUSTARIA JUGAR?", "OK, NOS VEMOS"} }, {{"LO VES"}, {"NO LO VEO", "COMPRENDO", "NO COMPRENDO", "CREO QUE NECESITO GAFAS"} }, {{"GAFAS"}, {"TE GUSTAN LAS GAFAS?", "ME GUSTA USAR GAFAS"} }, {{"MAL"}, {"NO ME DIGAS QUE TE SIENTES MAL?", "POR QUE DICES ESO?", "U_U QUE MAL ESCUCHAR ESO..."} }, {{"TIENES MIEDO?"}, {"ES NORMAL SENTIR MIEDO", "TU SI?", "EVITARÉ HABLAR DE ELLO"} }, }; private static String transposList[][] = { {"YO SOY", "TU ERES"}, {"SOY", "ERES"}, {"FUERON", "FUERON"}, {"FUI", "FUISTE"}, {"MIO", "TUYO"}, {"YO HE", "TU HAZ"}, {"HAN", "HAN"}, {"YO", "TU"}, {"MI", "TI"}, {"FUISTE", "FUI"}, {"ERA", "ERAS"}, {"ERAN", "ERAN"}, {"TENGO", "TIENES"}, {"TENIA", "TUVISTE"}, {"PAPÁ", "PADRE"}, {"MAMÁ", "MADRE"}, {"SUEÑOS", "SUEÑO"}, {"MI MISMO", "TU MISMO"}, {"TI MISMO", "MI MISMO"}, {"TE", "ME"} }; @SuppressWarnings("UseOfObsoleteCollectionType" private static Vector<String> respList = new Vector<String>(respNum); public static void get_input() throws Exception { System.out.print(">" // saves the previous input save_prev_input(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); sEntrada = in.readLine(); preprocess_input(); } public static void respond() { save_prev_response(); set_event("RobxOS entiende**" if(null_input()) { handle_event("NULL INPUT**" } else if(null_input_repetition()) { handle_event("NULL INPUT REPETITION**" } else if(user_repeat()) { handle_user_repetition(); } else { find_match(); } if(user_want_to_quit()) { bSalir = true; } if(user_want_to_quit2()) { bSalir = true; } if(user_want_to_quit3()) { bSalir = true; } if(user_want_to_quit4()) { bSalir = true; } if(!bot_understand()) { handle_event("ROBXOS NO ENTIENDE**" } if(respList.size() > 0) { select_response(); preprocess_response(); if(bot_repeat()) { handle_repetition(); } print_response(); } } public static boolean quit() { return bSalir; } // make a search for the user's input // inside the database of the program public static void find_match() { respList.clear(); // introduce thse new "string variable" to help // support the implementation of keyword ranking // during the matching process String bestKeyWord = ""; @SuppressWarnings("UseOfObsoleteCollectionType" Vector<Integer> index_vector = new Vector<Integer>(respNum); for(int i = 0; i < KnowledgeBase.length; ++i) { String[] keyWordList = KnowledgeBase[0]; for(int j = 0; j < keyWordList.length; ++j) { String keyWord = keyWordList; char firstChar = keyWord.charAt(0); char lastChar = keyWord.charAt(keyWord.length() - 1); keyWord = trimLR(keyWord, "_" // we inset a space character // before and after the keyword to // improve the matching process keyWord = " " + keyWord + " "; int keyPos = sEntrada.indexOf(keyWord); // there has been some improvements made in // here in order to make the matching process // a littlebit more flexible if( keyPos != -1 ) { if(wrong_location(keyWord, firstChar, lastChar, keyPos) ) { continue; } //'keyword ranking' feature implemented in this section if(keyWord.length() > bestKeyWord.length()) { bestKeyWord = keyWord; index_vector.clear(); index_vector.add(i); } else if(keyWord.length() == bestKeyWord.length()) { index_vector.add(i); } } } } if(index_vector.size() > 0) { sPalabra = bestKeyWord; Collections.shuffle(index_vector); int respIndex = index_vector.elementAt(0); int respSize = KnowledgeBase[1].length; for(int j = 0; j < respSize; ++j) { respList.add(KnowledgeBase[1]); } } } public static void preprocess_response() { if(sRespuesta.indexOf("*" != -1) { // extracting from input find_subject(); // conjugating subject sTema = transpose(sTema); sTema = sTema.trim(); sRespuesta = sRespuesta.replace("*", " " + sTema); } } public static void find_subject() { sTema = ""; // resets subject variable int pos = sEntrada.indexOf(sPalabra); if(pos != -1) { sTema = sEntrada.substring(pos + sPalabra.length() - 1,sEntrada.length()); } } // implementing the 'sentence transposition' feature public static String transpose( String str ) { boolean bTransposed = false; for(int i = 0; i < transposList.length; ++i) { String first = transposList[1]; first = " " + first + " "; String second = transposList[0]; second = " " + second + " "; String backup = str; str = str.replace(first, second); if(str != backup) { bTransposed = true; } } if(!bTransposed) { for( int i = 0; i < transposList.length; ++i ) { String first = transposList[0]; first = " " + first + " "; String second = transposList[1]; second = " " + second + " "; str = str.replace(first, second); } } return str; } // determins if the keyword position is correct depending on the type of keywords within these algorithm, // we consider that there is four type of keywords those who have any front or back underscore are allowed // to be at any place on a given user input and they can also be found alone on a given user input. // Those who have a back and front (_keyWord_) underscore can be found only alone on an input. // The keywords who only have have an understandin the front can never be found at the end of an input. // And finaly, the keywords who have an underscore at the back should alway belocated at the end of the input. static boolean wrong_location(String keyword, char firstChar, char lastChar, int pos) { boolean bWrongPos = false; pos += keyword.length(); if( (firstChar == '_' && lastChar == '_' && sEntrada != keyword) || (firstChar != '_' && lastChar == '_' && pos != sEntrada.length()) || (firstChar == '_' && lastChar != '_' && pos == sEntrada.length()) ) { //System.out.println("keyword:= " + keyword + ", firstChar = " + firstChar + ", lastChar = " + lastChar); bWrongPos = true; } return bWrongPos; } public static void handle_repetition() { if(respList.size() > 0) { respList.removeElementAt(0); } if(no_response()) { save_input(); set_input(sEvento); find_match(); restore_input(); } select_response(); } public static void handle_user_repetition() { if(same_input()) { handle_event("REPETITION T1**" } else if(similar_input()) { handle_event("REPETITION T2**" } } public static void handle_event(String str) { save_prev_event(); set_event(str); save_input(); str = " " + str + " "; set_input(str); if(!same_event()) { find_match(); } restore_input(); } public static void signon() { handle_event("SIGNON**" select_response(); print_response(); } public static void select_response() { Collections.shuffle(respList); sRespuesta = respList.elementAt(0); } public static void save_prev_input() { sPrevEnt = sEntrada; } public static void save_prev_response() { sPrevResp = sRespuesta; } public static void save_prev_event() { sPrevEvent = sEvento; } public static void set_event(String str) { sEvento = str; } public static void save_input() { sEntBackup = sEntrada; } public static void set_input(String str) { sEntrada = str; } public static void restore_input() { sEntrada = sEntBackup; } public static void print_response() { if(sRespuesta.length() > 0) { System.out.println(sRespuesta); } } public static void preprocess_input() { sEntrada = cleanString(sEntrada); sEntrada = sEntrada.toUpperCase(); sEntrada = " " + sEntrada + " "; } public static boolean bot_repeat() { return (sPrevResp.length() > 0 && sRespuesta == sPrevResp); } public static boolean user_repeat() { return (sPrevEnt.length() > 0 && ((sEntrada == sPrevEnt) || (sEntrada.indexOf(sPrevEnt) != -1) || (sPrevEnt.indexOf(sEntrada) != -1))); } public static boolean bot_understand() { return respList.size() > 0; } public static boolean null_input() { return (sEntrada.length() == 0 && sPrevEnt.length() != 0); } public static boolean null_input_repetition() { return (sEntrada.length() == 0 && sPrevEnt.length() == 0); } public static boolean user_want_to_quit() { return (sEntrada.indexOf("HASTA LUEGO" != -1); } public static boolean user_want_to_quit2() { return (sEntrada.indexOf("NOS VEMOS" != -1); } public static boolean user_want_to_quit3() { return (sEntrada.indexOf("ADIOS" != -1); } public static boolean user_want_to_quit4() { return (sEntrada.indexOf("NOS VEMOS DESPUES" != -1); } public static boolean same_event() { return (sEvento.length() > 0 && sEvento == sPrevEvent); } public static boolean no_response() { return respList.size() == 0; } public static boolean same_input() { return (sEntrada.length() > 0 && sEntrada == sPrevEnt); } public static boolean similar_input() { return (sEntrada.length() > 0 && (sEntrada.indexOf(sPrevEnt) != -1 || sPrevEnt.indexOf(sEntrada) != -1)); } static boolean isPunc(char ch) { return puncs.indexOf(ch) != -1; } // removes punctuation and redundant // spaces from the user's input static String cleanString(String str) { StringBuffer temp = new StringBuffer(str.length()); char prevChar = 0; for(int i = 0; i < str.length(); ++i) { if((str.charAt(i) == ' ' && prevChar == ' ' ) || !isPunc(str.charAt(i))) { temp.append(str.charAt(i)); prevChar = str.charAt(i); } else if(prevChar != ' ' && isPunc(str.charAt(i))) { temp.append(' '); prevChar = ' '; } } return temp.toString(); } static String trimLR(String str, String delim) { StringBuffer temp = new StringBuffer(str); int index1 = temp.indexOf(delim); int index2 = temp.lastIndexOf(delim); if(index1 != -1) { temp.deleteCharAt(index1); index2--; } if(index2 > -1) { temp.deleteCharAt(index2); } return temp.toString(); } /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub System.out.println("RobxOS esta basado en Chatterbot" try { signon(); while(!quit()) { get_input(); respond(); } } catch(Exception e) { e.printStackTrace(); } }}
Victor Farestina apodado como Neko-Vi, es un diseñador grafico italiano de 19 años, hace geniales vestidos para todos los gustos, aqui algunos de sus trabajos: Aqui su cuenta de DeviantART:

wall.fm es una herramienta gratuita que nos permite crear redes sociales de forma relativamente sencilla.Nuestro proyecto estaría incluído dentro de un subdominio de wall.fm, con posibilidad de configurarlo para incluir las funciones que sean necesarias para crear una gran comunidad.Podemos crear un sitio para compartir fotos y vídeos, uma web de citas, un proyecto con fines educativos, una comunidad de clientes, un sitio web familiar… practicamente cualquier cosa que necesite de una serie de usuarios comunicándose y compartiendo información.Lo interesante de este servicio es que podemos incluir a menores de edad en nuestras redes sociales (muy bueno si queremos crear un grupo para un aula de clases) ademas de incluir elementos tales como juegos, complemento de facebook, twitter...etc con solo copiar el codigo html de estos addonsAntes conocido como WackWall, es otra alternativa a los que usasteis Ning en el pasado, aunque la versión gratuita sólo incluye 5 gigas de espacio…CREACION DE LA CUENTA Antes de nada, es necesario crearse una cuenta en wall.fm para poder crear grupos. No es el caso de los alumnos. Accedemos a wall.fm y hacemos clic en "Sign In". Como no tenemos cuenta, hacemos clic en el enlace situado al pié del formulario "Don’t have an account jet?”.Rellenamos el formulario con nuestros datos para que se nos cree la cuenta en wall.fm Se nos informa que para que la cuenta quede activada, debemos ir a nuestro correo electrónico y en un email recibido, hacer clic sobre el enlace que nos aporta. Nuevamente accedemos a "Sign In" y ahora accedemos con nuestra dirección de correo electrónico y la contraseña elegida. Siempre accederemos a nuestra cuenta de ésta manera. Ya veremos que para cada red se nos generará un nombre de usuario y contraseña que nos llegará por email.CREACION DE UN NUEVO GRUPO Para crear una red en wall.fm, una vez "logueados" hacemos clic sobre "Create new social network" y accedemos al formulario de creación de un nuevo grupo. Debemos definir el nombre de la red, su URL, el tagline y una descripción. Clic en create y ya tenemos creada nuestra red. Antes de finalizar nos solicita que escojamos una de las plantillas existentes, la cual podremos personalizar más adelante. Al finalizar, se nos muestra nuestra cuenta en wall.fm donde ya aparece el grupo y haciendo clic sobre su nombre accederemos a ella. Además habremos recibido un correo electrónico que nos porporciona el nombre de usuario y la contraseña del usuario administrador para poder gestionar el nuevo grupo. Aquí podemos ver el aspecto final que nos proporciona por defecto wall a nuestro grupo. Es el momento de acceder con nuestras credenciales de administrador y configurarlo a nuestro gusto o necesidades. Podremos acceder a la administración desde el formulario de acceso ubicado arriba a la derecha. IMPORTANTE: recuerda que para acceder hay que utilizar el nombre de usuario y contraseña asignados por wall.fm para éste grupo. No es la misma contraseña que la de la cuenta de wall.fm CONFIGURAR IDIOMA DEL GRUPO Por defecto, los grupos se crean con un solo idioma, el inglés. Si deseamos cambiar el idioma o que el usuario pueda escoger el idioma de la interfaz, es necesario añadir nuevos paquetes de idiomas. Vamos a añadirle a nuestro grupo el castellano. Primero hay que localizar un paquete de idioma. Como es algo complejo, os dejo aquí la descarga del paquete que he localizado de otros usuarios. http://dl.dropbox.com/u/5314759/REDESSOCIALES/idioma_wall_fm.zipCon nuestro usuario y contraseña, accedemos a nuestro sitio y posteriormente clic en la pestaña "Admin". Después escogemos "Setting/Language". Ahora, en la pestaña "availables languages" nos permite subir un nuevo paquete de idioma. Una vez subido, seleccionamos el idioma español para todos los módulos del grupo. Ahora tenemos que activar el nuevo idioma. Pasando el cursor sobre el nuevo idioma, nos aparece un botón en verde "Activate". Haciendo clic, conseguimos activar el idioma español y desde éste momento, nuestro grupo dispondrá de un menú selector de idioma, arriba a la derecha. Si solo deseamos que la interfaz esté en español, debemos desactivar el idioma inglés. CONFIGURACION PRINCIPAL Desde la administración, concretamente en "Setting" tenemos acceso a la configuración general del grupo. En la primera pestaña "Básico" definimos nuestras preferencias para nuestra zona: formato fecha, horario, etc. Además podemos definir el límite del tamaño de los archivos que se pueden subir por los usuarios al participar en los foros. PRIVACIDAD DEL GRUPO Para el uso del grupo como aula virtual de nuestra clase, es necesario "cerrar" el acceso a la misma, de manera que solo profesor y alumnos tengan acceso al mismo. Para ello, desde la administración vamos a "Privacidad y Permisos/Privacidad Global" y dejamos las opciones como la siguiente imagen. De ésta manera, si accedemos a nuestro grupo sin estar "logueados" nos pedirá las credenciales de acceso. Aunque hay un enlace que nos invita a registrarnos, éste no funciona pues hemos decidido que solo admitimos registros por invitación. GESTION DE USUARIOS El gestor de usuarios nos permite definir quienes serán usuarios de nuestro grupo y activar/desactivar cuentas. En la opción "Usuarios/usuarios" nos aparece la relación de los usuarios de nuestro grupo, pudiendo ordenarse en diferentes pestañas: Suspendido, Sin Verificar, No aprobado. En nuestro caso, no vamos a tener "No aprobado" pues el registro libre no está permitido. Los suspendidos son aquellos a los que les desactivamos la cuenta. En cualquier momento, podemos volver a activarla. Las cuentas sin verificar, son aquellos que no han activado la cuenta desde su correo electrónico. Nosotros podemos acticarlas desde aquí. Invitar usuarios. Desde el botón de "Invitar a nuevos usuarios" podemos lanzar las invitaciones de hasta 50 correos electrónicos, cada uno en una linea. Los usuarios reciben el correo electrónico y deben seguir el enlace que reciben en el mensaje. Antes de que los usuarios se den de alta, es recomendable adaptar el formulario de alta a nuestras necesidades. Se accede desde "Usuarios/Perfil de las preguntas". Aquí podemos reordenar las preguntas existentes, crear nuevas preguntas y secciones, y eliminarlas. En mi caso, voy a eliminar las 3 últimas de la sección "básico". Los nuevos usuarios reciben un email con un enlace para acceder al formulario de inscripción como el siguiente. Una vez completado el formulario y enviado, el usuario recibe un email con un enlace que le posibilita la verificación de que su correo electrónico es correcto. De no hacerlo el usuario, tenemos la opción de realizarlo desde la gestión de usuarios. Al hacer clic, al usuario se le abre una ventana nueva del navegador cargando nuestro grupo con un mensaje de advertencia: "Su cuenta está pendiente de aprobación". Por tanto, para aprobar la cuenta del usuario y que quede plenamente activa, accederemos a la gestión de usuarios y debemos hacer clic sobre el nombre del usuario (están en la pestaña "no aprobados". Una vez dentro del perfil del usuario, haremos clic sobre "aprobar".PAGINAS Y MENÚS Desde la sección "páginas y menús" podemos configurar los múdulos presentes en cada página y las pestañas/páginas que dispondrá nuestro grupo. Vamos a centrarnos en el más importante, denominado "páginas y menús". En ésta pantalla podemos determinar las pestañas que serán accesibles desde el menú superior del grupo así como los enlaces al pié de página. Haciendo clic sobre el botón de una delas pestañas nos aparece la opción "edit" que nos permite definir el nombre de la pestaña y sus permisos (visible a nadie, solo usuario, solo invitados, todos). Desde "añadir artículo" podemos incorporar nuevos contenidos a nuestro grupo, bien con el acceso a una web externa, bien montando nuestra propia página haciendo uso de código HTML (por ejemplo un mapa con google maps). En mi caso, no me gusta utilizar el "escritorio" como página de inicio. Para evitarlo, modifico los permisos de su pestaña. PERSONALIZAR PÁGINAS Por último, vamos a ver como determinar los contenidos visibles en cada una de las páginas de nuestro grupo. Para ello, debemos como administradores estar en la página a modificar (desde la parte vista de la web) y dispondremos arriba un botón denominado "Personalizar ésta página". Al activar la edición, podemos actuar sobre los diferentes bloques presentes (moverlos, quitarlos y editarlos) y añadir nuevos bloques arrastrándolos desde la parte superior. En mi caso, en la página de inicio he eliminado el muro, pues el widget "suministro de noticias" actua como un muro. Además el título de cada bloque puede ser adaptado a nuestras necesidades (de hecho, vienen en inglés). El widget "Texto/HTML" permite incorporar bloques personalizados. El resto suelen ser funcionalidades proporcionadas por los diferentes plugin presentes en el grupo (cumpleaños, grupos, fotos, videos, etc). Espero que éste tutorial les sirva de ayuda para poner a funcionar su red social.
Que es y para qué sirve La herramienta hping es un analizador/ensamblador de paquetes TCP/IP de uso en modo consola. Está inspirado en el comando ping de unix, aunque a diferencia de éste, hping no solo es capaz de enviar paquetes ICMP sino que además también puede enviar paquetes TCP, UDP, y RAW-IP. Todo esto quiere decir, que con esta herramienta, podemos generar paquetes TCP/IP a medida, que contengan la información que queramos. Esto puede resultar muy interesante para poder efectuar auditorías de red y poder así prevenir ataques malintencionados. Descarga e instalación La instalación de esta herramienta, al menos en Ubuntu, es realmente sencilla, como la mayoría de aplicaciones. Tan sólo hay que abrir una consola y escribir como root: root@laptop:/home/root# apt-get install hping3 Diferentes usos y su sintaxis El uso más sencillo que podemos darle es como sustituto de la herramienta ping, aunque veremos que la información que nos aporta es algo diferente. Vamos a comparar ambas herramientas: root@laptop:/home/root# ping localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.020 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.016 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.017 ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.023 ms ^C — localhost ping statistics — 4 packets transmitted, 4 received, 0% packet loss, time 2997ms rtt min/avg/max/mdev = 0.016/0.019/0.023/0.002 ms root@laptop:/home/root# hping3 localhost HPING localhost (lo 127.0.0.1): NO FLAGS are set, 40 headers + 0 data bytes len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=0.1 ms len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=0.1 ms len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=2 win=0 rtt=0.0 ms len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=0 flags=RA seq=3 win=0 rtt=0.0 ms ^C — localhost hping statistic — 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.0/0.0/0.1 ms En ambos casos, la información que nos proporciona es muy similar, salvo algún pequeño matiz como el campo de flags, que a continuación veremos de qué se trata. También podemos utilizarlo como scanner de puertos, utilizando el método idle scan (por cierto, método ideado por Salvatore Sanfilipo, el mismo creador de hping), la sintaxis es la siguiente: root@laptop:/home/root# hping3 -S localhost -p 9091 HPING localhost (lo 127.0.0.1): S set, 40 headers + 0 data bytes len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=0 win=32792 rtt=0.1 ms len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=1 win=32792 rtt=0.1 ms len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=2 win=32792 rtt=0.1 ms len=44 ip=127.0.0.1 ttl=64 DF id=0 sport=9091 flags=SA seq=3 win=32792 rtt=0.0 ms ^C — localhost hping statistic — 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.0/0.1/0.1 ms Si nos fijamos en el valor del flag, veremos que pone SA, que quiere decir SYN/ACK, que a grosso modo es el mensaje que un servidor responde cuando tiene un puerto abierto (en mi caso tengo un pequeño servidor web en el puerto 9091). Si hubiera estado cerrado, nos habría respondido con el flag RA, que quiere decir RST/ACK, o lo que es lo mismo, que tiene el puerto cerrado; veámoslo utilizando otro puerto distinto: root@laptop:/home/root# hping3 -S localhost -p 9092 HPING localhost (lo 127.0.0.1): S set, 40 headers + 0 data bytes len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=9092 flags=RA seq=0 win=0 rtt=0.0 ms len=40 ip=127.0.0.1 ttl=64 DF id=0 sport=9092 flags=RA seq=1 win=0 rtt=0.1 ms ^C — localhost hping statistic — 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.0/0.0/0.1 ms En este caso nos responde con un RST/ACK, lo que nos indica que el puerto 9092 está cerrado. Otro uso que podemos darle es como herramienta traceroute, aunque para este uso, prefiero tcptraceroute, veamos cómo hacerlo con hping: root@laptop:/home/root# hping3 pedrocarrasco.org -t 1 −−traceroute HPING pedrocarrasco.org (wlan0 174.132.157.133): NO FLAGS are set, 40 headers + 0 data bytes hop=1 TTL 0 during transit from ip=10.109.8.1 name=UNKNOWN hop=1 hoprtt=0.9 ms El campo ip=10.109.8.1, hace referencia a la IP del primer salto que realiza para llegar al dominio especificado. Ésto lo hemos especificado poniendo -t 1 (también podemos utilizar el comando -z en vez de -t, e incrementar el TTL cuanto queramos de uno en uno presionando Ctrl+Z). Además podemos “firmar” los paquetes que enviemos, con el contenido que queramos. Aunque este ejemplo es inocuo, utilizándolo (in)debidamente podríamos causar diversas alteraciones en la máquina destino. Veámos el ejemplo: root@laptop:/home/root# cat firma.txt esto es solo un ejemplo root@laptop:/home/root# hping3 -2 -p 7 localhost -d 50 -E firma.txt HPING localhost (lo 127.0.0.1): udp mode set, 28 headers + 50 data bytes memlockall(): Success Warning: can’t disable memory paging! ICMP Port Unreachable from ip=127.0.0.1 name=localhost status=0 port=1963 seq=0 Estableciendo la opción -2 enviamos paquetes UDP, con la opción -d 50 indicamos la longitud del mensaje y con la opción -E indicamos que lea del archivo firma.txt. Podemos ver lo que hemos enviado si capturamos con cualquier sniffer (yo he usado wireshark) el tráfico de la red. Firmar paquetes con hping Otra interesante habilidad de hping es poder enviar archivos a través de la red. Para esto, necesitamos una máquina que envíe algún archivo, y otra que esté a la escucha para recibirlo. Primero, preparamos la máquina que permanecerá a la escucha, para ello utilizaremos el parámetro −−listen en el que especificaremos el texto que nos servirá de indicador de inicio de mensaje (en este caso utilizo signature), el protocolo que usaremos es ICMP y lo establecemos utilizando el parámetro −−icmp (también puede usarse UDP o TCP). Al ejecutarlo veremos algo así: root@laptop:/home/root# hping3 localhost −−listen signature −−safe −−icmp Warning: Unable to guess the output interface hping3 listen mode memlockall(): Success Warning: can’t disable memory paging! Ahora toca preparar por otro lado el comando que nos servirá para enviar el fichero que queramos. root@laptop:/home/root# hping3 localhost −−icmp -d 50 −−sign signature −−file firma.txt HPING localhost (lo 127.0.0.1): icmp mode set, 28 headers + 50 data bytes memlockall(): Success Warning: can’t disable memory paging! len=78 ip=127.0.0.1 ttl=64 id=5268 icmp_seq=0 rtt=0.1 ms len=78 ip=127.0.0.1 ttl=64 id=5287 icmp_seq=1 rtt=0.1 ms len=78 ip=127.0.0.1 ttl=64 id=5289 icmp_seq=2 rtt=0.1 ms len=78 ip=127.0.0.1 ttl=64 id=5291 icmp_seq=3 rtt=0.1 ms len=78 ip=127.0.0.1 ttl=64 id=5293 icmp_seq=4 rtt=0.1 ms len=78 ip=127.0.0.1 ttl=64 id=5295 icmp_seq=5 rtt=0.1 ms len=78 ip=127.0.0.1 ttl=64 id=5297 icmp_seq=6 rtt=0.1 ms El resultado es que en el lado en que estábamos esperando recibir algo, empieza a verse lo siguiente: root@laptop:/home/root# hping3 localhost −−listen signature −−safe −−icmp Warning: Unable to guess the output interface hping3 listen mode memlockall(): Success Warning: can’t disable memory paging! esto es solo un ejemplo esto es solo un ejemplo esto es solo un ejemplo esto es solo un ejemplo esto es solo un ejemplo esto es solo un ejemplo Conociendo este último uso, y con un poco de imaginación podremos utilizar hping como si de un troyano se tratase. Aunque mas que para ser usado como troyano, esta herramienta es perfecta para realizar ataques de DoS, spoof o flood. Acabaremos el artículo viendo un sencillo ejemplo de ataque flooding: root@laptop:/home/root# hping3 −−rand-source −−flood localhost HPING localhost (lo 127.0.0.1): NO FLAGS are set, 40 headers + 0 data bytes hping in flood mode, no replies will be shown ^C — localhost hping statistic — 189742 packets transmitted, 0 packets received, 100% packet loss round-trip min/avg/max = 0.0/0.0/0.0 ms Podemos ver que en tan solo unos segundos, hemos inundado la red con casi doscientos mil paquetes transmitidos de forma ininterrumpida. Esto puede (suele) causar que la red se colapse, impidiendo a otros usuarios poder utilizarla, ya que hping no deja espacio (entre paquete y paquete) para que otras máquinas transmitan ningún tipo de información. El parámetro −−rand-source hace que cada paquete tenga un origen distinto y aleatorio, y −−flood no deja espacio entre paquete y paquete. Si tenemos wireshark a la escucha, podemos ver cual es el resultado: hping-flood Ahora les toca practicar con hping para aprender más sobre el protocolo TCP/IP y sus debilidades. No creo que haga falta decirlo, pero por si acaso aviso de que el uso malintencionado de esta herramienta puede ser ilegal, así que utilizad esta información de un modo educativo o para auditar vuestra propia red.
Quiza el primer paso para que un usuaro haga el salto a un sistema operativo libre inicia con el software, asi que para demostrar que las fundaciones, organizaciones y empresas no abandonan a los usuarios solo pro preferir otro sistema operativo, les traigo esta pagina en donde podran ver enlaces a diferentes aplicaciones pero desde sus paginas oficiales (mucho más seguro que megaupload, rapidshare etc...) o sino descargar un CD con todas las aplicaciones que se muestran en la pagina http://softwarelibre.unsa.edu.ar/slw/soft.html
Quiero hacer este post solo para demostrar que podemos hacer casi cualquier cosa a traves de software libre y open source, iremos desde lo basico hasta aplicaciones más especializadas, todas estas aplicaciones estan disponibles en Windows o en algun caso en GNU/Linux o Unix.No pondre imagenes ya que en las respectivas paginas encontraremos algun screenshot.1.Libre Office (alternativa a MS Office) http://www.libreoffice.org/Es una suite ofimatica gratuita y libre que viene en versiones para Windows, Linux y Mac, incluye herramientas para olvidarnos un poco de Word, Excel, Powerpoint y Access e incluso trae su propia aplicacion para dibujo (algo más avanzado que n simple Paint)2.Firefox, Chrome...entre otros http://www.google.com/chrome http://www.mozilla.org/es-AR/firefox/new/Ya los conocemos, navegadores open source que le han ganado a IE la batalla desde hace ya varios años3.Bittornado (alternativa a Bittorrent) http://www.bittornado.com/download.htmlBittornado es una aplicacion para hacer descargas mediante el protocol torrent, muy util cuando nuestro internet no es muy bueno o cuando queremos detener la descarga en un punto y reanudarla luego4.Pidgin http://www.pidgin.im/download/windows/ (anteriormente llamado Gaim) es un cliente de mensajería instantánea multiplataforma capaz de conectarse a múltiples redes (multiprotocolo) y cuentas (multicuenta) de manera simultánea.5.Mozilla Thunderbird http://www.mozilla.org/es-ES/thunderbird/ es un cliente de correo electrónico de la Fundación Mozilla. Su objetivo es desarrollar un Mozilla más liviano y rápido mediante la extracción y rediseño del gestor de correo del Mozilla oficial. Es multiplataforma, utiliza el lenguaje de interfaz XUL y es software libre.6.Qemu http://wiki.qemu.org/Download http://www.h7.dion.ne.jp/~qemu-win/ (alternativa a VM Ware) QEMU es un emulador de procesadores basado en la traducción dinámica de binarios (conversión del código binario de la arquitectura fuente en código entendible por la arquitectura huésped). QEMU también tiene capacidades de virtualización dentro de un sistema operativo, ya sea GNU/Linux, Windows, o cualquiera de los sistemas operativos admitidos, (de hecho es la forma más común de uso). Esta máquina virtual puede ejecutarse en cualquier tipo de Microprocesador o arquitectura (x86, x86-64, PowerPC, MIPS, SPARC, etc.). Está licenciado en parte con la LGPL y la GPL de GNU.7.Jdownloader http://jdownloader.org/Con esta aplicacion libre podemos hacer descargas de manera mas comoda desde paginas como megaupload, rapidshare, hotfile entre otros más8.Monodevelop http://monodevelop.com/Esta suite de programación vendria siendo el Visual Studio pero en version libre (o al menos semi libre), incluye soporte de lenguajes .Net, Java, Vala entre otros lenguajes9.Gambas2 http://gambas.sourceforge.net/en/main.htmlCon este IDE podremos trabajar en Basic o al menos un fork llamado Gambas que ofrece muchas caracteristicas al VB que todos conocemos, actualmente el port para Windows y Mac está incompleto, pero lo podremos utilizar muy bien en distribuciones GNU/Linux o Unix10.Kompozer http://http://kompozer.net/Con esta aplicacion podremos hacer paginas web en HTML sin tantos conocimientos de este lenguaje ya que permite editar en modo grafico nuestros proyectos (algo asi como lo que se veia en FrontPage pero mejorado)11.VLC http://www.videolan.org/vlc/Es un reproductor multimedia que soporta la mayoria de los codecs comerciales y otros no tan comerciales, muy bueno en verdad12.FreeCAD http://sourceforge.net/apps/mediawiki/free-cad/index.php?title=Install_on_Windows es una aplicación libre de diseño asistido por computadora en tres dimensiones, ingeniería asistida por computadora, para la asistencia en ingeniería mecánica y el diseño de elementos mecánicos. Está basado en Open CASCADE y programado en los lenguajes C++ y Python.12.Cualquier distribucion GNU/Linux o UnixTrata de remplazar por completo a los sistemas operativos tradicionales, la mayoria son gratuitos pero no por eso son malos, orientados algunos a un sector especifico o quiza de proposito generalhttp://distrowatch.com/ es una pagina en donde encontraremos las ultimas noticias sobre lanzamientos de varias de estas distribuciones, aquellos que no sepan sobre el tema se les motiva a entrar y ver que no solo existe Windows o Mac, tambien es bueno decir que la mayoria de las distribuciones ya vienen con lo basico para funcionar quiza a excepcion de los codecs multimedia, pero las comunidades en internet, blogs etc... explican muy bien como dar nuestros primeros pasos.Para ampliar mucho más en el tema pueden visitar un post que he encontrado aqui en Taringa http://www.taringa.net/posts/linux/4547444/64-aplicaciones-Open-Source-que-te-pueden-cambiar-la-vida.htmlno quiero hacer este post algo demasiado extenso asi que deseo que puedan revisar este link http://www.slideshare.net/lcaballero/diseo-grfico-digital-en-software-libre-v317se trata de aplicaciones libres utilizadas en diseño grafico (asi no hay excusa para dejar al Adobe Suite, 3DS Max entre otras aplicaciones privativas)y un video animado hecho por Blender Institute para terminarhttp://vimeo.com/17466681