PHP – Geolocalización de una IP
Publicado por romeo84 en Sin categoría el enero 7, 2012
Este es un pequeño programita que sirve para obtener datos geográficos usando como entrada la IP del servidor
<?php
//Colocar la IP del servidor del cual queremos obtener la información geográfica
$servidor = 'X.x.x.x';
$llamada = unserialize(
file_get_contents(
'http://www.geoplugin.net/php.gp?ip=' . $servidor)
);
echo "---Localización del Servidor ".$servidor."----";
echo "
Ciudad ".$llamada['geoplugin_city'];
echo "
Región ".$llamada['geoplugin_region'];
echo "
Latitud ".$llamada['geoplugin_latitude'];
echo "
Longitud ".$llamada['geoplugin_longitude'];
?>
Configurar un repositorio YUM
1. Montar el DVD y copiar el contenido a un directorio
mount -o loop rhel-server-5.6-x86_64-dvd.iso /mnt/disco/
cd /mnt/disco/Packages/
rpm -ivh createrepo-0.9.8-4.el6.noarch.rpm
mkdir -p /var/www/html/iso/
cp -r /mnt/disco/Packages/* /var/www/html/iso/
2. Configurar el repositorio
vim /etc/yum.repos.d/repositorio.repo
[base]
name=Red Hat Enterprise Linux $releasever - $basearch - Base
baseurl=file:///var/www/html/iso
gpgcheck=0
enabled=1
3. Crear el repomd (xml-rpm-metadata)
/var/www/html/iso
createrepo .
yum update/etc/yum.repos.d/repositorio.repo
4. En los otros servidores que están dentro de la misma subred se hace lo siguiente:
vim /etc/yum.repos.d/repositorio.repo
[base]
name=Red Hat Enterprise Linux $releasever - $basearch - Base
baseurl=http://192.168.1.1/iso
gpgcheck=0
enabled=1
Instalación Básica de un servidor NFS
1. Deshabilitación de SELinux
[root@rhel ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
2. Deshabilitación del cortafuegos
[root@rhel ~]#chkconfig iptables off
3. Instalación de los servicios necesarios para NFS
[root@rhel ~]# yum -y install nfs-utils rpcbind
4. Habilitación de los servicios necesarios para NFS
[root@rhel ~]# chkconfig nfs on
[root@rhel ~]# chkconfig rpcbind on
[root@rhel ~]# chkconfig nfslock on
5. Configuración de NFS
[root@rhel ~]# vim /etc/sysconfig/nfs
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020
6. inicio de los servicios
[root@rhel ~]# service rpcbind start
[root@rhel ~]# service nfs start
[root@rhel ~]# service nfslock start
7. Configuración de /etc/exports
[root@rhel ~]# vim /etc/exports
/datos 192.168.1.0/24(rw,sync)
8. estado del servicio NFS
[root@rhel ~]# nfstat
Configuración en el cliente
1. Instalación de utilidades
[root@rhel ~]# yum -y install nfs-utils rpcbind
2. Inicialización de los servicios
[root@rhel ~]# service rpcbind start [root@rhel ~]# service netfs start [root@rhel ~]# service nfslock start
3. Verificación
[root@rhel ~]# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 53446 status
100024 1 tcp 37562 status
100021 1 udp 45403 nlockmgr
100021 3 udp 45403 nlockmgr
100021 4 udp 45403 nlockmgr
100021 1 tcp 33077 nlockmgr
100021 3 tcp 33077 nlockmgr
100021 4 tcp 33077 nlockmgr
4. Edición del archivo /etc/fstab
[root@rhel ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Aug 9 20:36:02 2011
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_rhel-lv_root / ext4 defaults 1 1
UUID=19974464-29a1-43fd-b5ba-a8ff5356bc78 /boot ext4 defaults 1 2
/dev/mapper/vg_rhel-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
192.168.1.1:/datos /datos nfs hard,nfsvers=2 0 0
5. Verificación
En el servidor
[root@rhel datos]# echo "Hola, soy el servidor , la hora es `date` , mis ips son `ip add
show| grep /24` y la hora es `date`" > hora_servidor.txt
En el cliente
[root@rhel ~]# date && cat /datos/hora_servidor.txt
jue ago 11 01:43:54 CDT 2011
Hola, soy el servidor , la hora es jue ago 11 01:43:09 CDT 2011 , mis ips son inet
192.168.1.1/24 brd 192.168.1.255 scope global eth2
inet
192.168.1.2/24 brd 192.168.1.255 scope global eth3 y la hora es jue ago 11 01:43:09 CDT 2011
Java: Implementación de una Lista ligada
Publicado por romeo84 en programación el julio 30, 2011
package lisligada;
import javax.swing.*;
import java.util.*;
/**
*
* @author eddy_r
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// implementacion de la lista ligada
LinkedList listaLigada = new LinkedList();
Integer menu;
do {
menu = Integer.parseInt(
JOptionPane.showInputDialog(
"Menu\n\n" +
"1 Insertar a la izquierda\n" +
"2 Insertar a la derecha\n" +
"3 Eliminar a la izquierda\n" +
"4 Eliminar a la derecha\n" +
"5 Borrar toda la lista\n" +
"6 Mostrar toda la lista\n" +
"7 Mostrar número de elementos en la lista\n"+
"8 Salir"
)
);
switch(menu){
case 1:
listaLigada.addFirst(
JOptionPane.showInputDialog("Introduce un numero para agregarlo al inicio de la lista Ligada")
);
JOptionPane.showMessageDialog(null,""+listaLigada);
break;
case 2:
listaLigada.addLast(
JOptionPane.showInputDialog("Introduce un número para agregarlo al final de la lista Ligada")
);
JOptionPane.showMessageDialog(null, ""+listaLigada);
break;
case 3:
listaLigada.removeFirst();
JOptionPane.showMessageDialog(null,""+listaLigada);
break;
case 4:
listaLigada.removeLast();
JOptionPane.showMessageDialog(null,""+listaLigada);
break;
case 5:
listaLigada.clear();
JOptionPane.showMessageDialog(null,""+listaLigada + " Se ha vaciado la lista");
break;
case 6:
JOptionPane.showMessageDialog(null,""+listaLigada.toString()+ "");
break;
case 7:
JOptionPane.showMessageDialog(null,"La lista tiene "+listaLigada.size()+" elementos");
}
} while (menu != 8);
System.exit(0);
}
}
Java: Calculadora
Publicado por romeo84 en programación el julio 9, 2011
Clase Calc
package javaapplication1;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Iterator;
public class Calc extends JFrame{
//============================================================== Constantes
private static final Font FUENTE_GRANDE = new Font("monspaced", Font.PLAIN, 20);
//==== Campos
//.... Componentes referenciados durante la ejecución.
private JTextField _muestraCampo; // Muestra tanto el resultado como la entrada
//... Para representar el estado de la calculadora se usan estados
private boolean _iniciaNumero = true; // true
private String _operacionPrevia = "="; // La operacion anterior
private CalcLogic _logica = new CalcLogic(); // Calculadora interna.
//========================================================= método principal
public static void main(String[] args) {
//.... Coloca el Look and Feel al sistema que en el que estamos
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception unused) {
; // Ignora la excepción por que no se puede hacer otra cosa.. usaremos el default
}
//.... Crea la ventana
Calc window = new Calc();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
//============================================================== constructor
public Calc() {
//... Coloca los atributos del campo de display
_muestraCampo = new JTextField("0", 12); //0 es el valor mostrado por default, 12 el tamaño
_muestraCampo.setHorizontalAlignment(JTextField.RIGHT); //Alineación
_muestraCampo.setFont(FUENTE_GRANDE); //Colocamos la fuente
//... Crea y coloca los atributos del botón Limpia.
JButton clearButton = new JButton("Limpia");
clearButton.setFont(FUENTE_GRANDE);
//... Colocamos el listener para borrar el contenido.
clearButton.addActionListener(new ClearListener());
//... Usamos un listener para todas las teclas numericas.
ActionListener numListener = new NumListener();
//... Disposición de las teclas numericas en el grid. Genera los botones
// en un bucle donde se recorren los caracteres en una cadena
String ordenBotones = "789456123 0 ";
JPanel panelBotn = new JPanel();
panelBotn.setLayout(new GridLayout(5, 3, 2, 2));
for (int i = 0; i < ordenBotones.length(); i++) {
String teclasArriba = ordenBotones.substring(i, i+1);
JButton b = new JButton(teclasArriba);
if (teclasArriba.equals(" ")) {
//... Coloca un boton tonto en esta posición
b.setEnabled(false);
} else {
//... Coloca un boton de digitos en la interfaz
b.addActionListener(numListener);
b.setFont(FUENTE_GRANDE);
}
panelBotn.add(b);
}
//... Un ActionListener para usar para todos los botones operadores
ActionListener opListener = new OpListener();
//... Crea un panel con la disposicion para colocar los botones
//... Usa arreglos de nombres de los botones para crear los botones en
//... un ciclo
JPanel panelOperativo = new JPanel();
panelOperativo.setLayout(new GridLayout(5, 1, 2, 2));
String[] opOrder = {"+", "-", "*", "/", "="};
for (int i = 0; i < opOrder.length; i++) {
JButton b = new JButton(opOrder[i]);
b.addActionListener(opListener);
b.setFont(FUENTE_GRANDE);
panelOperativo.add(b);
}
//... Coloca el boton LImpia
JPanel clearPanel = new JPanel();
clearPanel.setLayout(new FlowLayout());
clearPanel.add(clearButton);
//... Dispone el contenido del panel top-level
JPanel contenido = new JPanel();
contenido.setLayout(new BorderLayout(5, 5));
contenido.add(_muestraCampo, BorderLayout.NORTH );
contenido.add(panelBotn , BorderLayout.CENTER);
contenido.add(panelOperativo , BorderLayout.EAST );
contenido.add(clearPanel , BorderLayout.SOUTH );
contenido.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
//... Termina la construcción del panel
this.setContentPane(contenido);
this.pack();
this.setTitle("Calculadora");
this.setResizable(false);
this.setLocationRelativeTo(null);
}//termina el contructor
//============================================================== actionClear
/** Llamado por la acción del botón limpia.*/
private void actionClear() {
_iniciaNumero = true; // Espera un número no una operación.
_muestraCampo.setText("0");
_operacionPrevia = "=";
_logica.setTotal("0");
}
//================================================= clase interna OpListener
/** Listener para todos los botones operadores. */
class OpListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// La calculadora siempre esta en uno de dos estados
// 1. Un numero debe ser ingresado - si se ingresa un operador esta mal
// 2. Un operador debe ser ingresado.
if (_iniciaNumero) { // Error: necesitamos un numero, no un operador
//... En este estado estamo esperando un numero, pero se ingreso un operador.
actionClear();
_muestraCampo.setText("ERROR - No operator");
} else {
//... Estamos esperando un operador.
_iniciaNumero = true; // Lo que viene debe ser un numero
try {
// Obtiene los valores del display,
String testoDesplegado = _muestraCampo.getText();
if (_operacionPrevia.equals("=")) {
_logica.setTotal(testoDesplegado);
} else if (_operacionPrevia.equals("+")) {
_logica.add(testoDesplegado);
} else if (_operacionPrevia.equals("-")) {
_logica.subtract(testoDesplegado);
} else if (_operacionPrevia.equals("*")) {
_logica.multiply(testoDesplegado);
} else if (_operacionPrevia.equals("/")) {
_logica.divide(testoDesplegado);
}
_muestraCampo.setText("" + _logica.getTotalString());
} catch (NumberFormatException ex) {
actionClear();
_muestraCampo.setText("Error");
}
//... coloca _operacionPrevia para el siguiente operador.
_operacionPrevia = e.getActionCommand();
}//termina endif
}//termina metodo
}//termina clase
//===================================== Clase listener interna ClearListener
class NumListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String digit = e.getActionCommand(); // Obtenemos el texto a partir del boton presionado
if (_iniciaNumero) {
//... Es el primer digito, se limpia el primer campo y se coloca el digito presionado
_muestraCampo.setText(digit);
//... ya no es el primer dígito
_iniciaNumero = false;
} else {
//... agrega este dígito al final del camplo del display
_muestraCampo.setText(_muestraCampo.getText() + digit);
}
}
}
//==================================== Listener interno, clase ClearListener
class ClearListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
actionClear();
}
}
}
Clase CalcLogic
package javaapplication1;
public class CalcLogic {
//-- variables
private int _currentTotal;
/** Constructor */
public CalcLogic(){
_currentTotal = 0;
}
public void setTotal(String n){
_currentTotal = convertToNumber(n);
}
private int convertToNumber(String n){
return Integer.parseInt(n);
}
public int add(String n){
return _currentTotal+=convertToNumber(n);
}
public void subtract(String n) {
_currentTotal -= convertToNumber(n);
}
public void multiply(String n) {
_currentTotal *= convertToNumber(n);
}
public void divide(String n) {
_currentTotal /= convertToNumber(n);
}
public String getTotalString() {
return "" + _currentTotal;
}
}