¿Consumir un Web Service NuSOAP en Android?

Primero debemos agregar el permiso:

<uses-permission android:name="android.permission.INTERNET" />

Para nuestro caso vamos ha llamar a la clase ClientesWS, la cual va a ejecutar la función saludar (de nuestro Web Service) con un parámetro (nombre) y recibirá una respuesta:

import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
 
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
 
public class ClienteWS extends AsyncTask<String, Integer, String> {
 
    private Context context;
     
    private static final String SOAP_ACTION = "SaludoXMLwsdl#Saludar";
    private static final String OPERATION_NAME = "Saludar";
    private static final String WSDL_TARGET_NAMESPACE = "SaludoXMLwsdl";
    public static final String SOAP_ADDRESS = "http://midominio.com/path/to/servicio.php";
 
    public ClienteWS(Context context) {
        this.context = context;
    }
 
    @Override
    protected String doInBackground(String... params) {
 
        String result = null;
 
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
                OPERATION_NAME);
 
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER10);
 
        // Con esta opción indicamos que el web service no es .net
        envelope.dotNet = false;
 
        envelope.setOutputSoapObject(request);
 
        HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
         
        // Enviando un parámetro al web service
        request.addProperty("nombre", params[0]);
 
        try {
             
            // Enviando la petición al web service
            httpTransport.call(SOAP_ACTION, envelope);
 
            // Recibiendo una respuesta del web service
            SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope
                    .getResponse();
 
            result = resultsRequestSOAP.toString();
 
            httpTransport.getServiceConnection().disconnect();
        } catch (IOException | XmlPullParserException e) {
            Log.v("Error", e.getMessage());
            result = e.getMessage();
        }
 
        return result;
    }
 
    @Override
    protected void onPostExecute(String result) {
        // Mostramos la respuesta del web service
        Toast.makeText(context, result, Toast.LENGTH_LONG).show();
    }
 
}

Luego para probar este cliente solamente tenemos que ejecutar el siguiente código en nuestra Activity:

new ClienteWS(this).execute("ProgramaciónExtrema.com");

Espero que sea de ayuda. Ante cualquier problema no duden en dejar un comentario.

Configura la hora en Windows Server 2016

Para hacer esto tenemos 2 metodos que podemos aplicar

Configuracion automatica del servicio de Hora de Windows

Esto corrige el problema en forma automatica, solo hay que darle clic y descargar el EasyFix de Microsoft

Lo descargars y ejecutas.

Configuracion manual del servicio de Hora de Windows

Para configurar un Controlador de Dominio principal solo tenemos que cambiar en el regedit y forzar a que se actualize la hora, para esto hacemos los siguiente:

  1. Ejecuta el regedit
  2. Luego tiene que ubicar la siguiente clave
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags
    
  3. En el panel derecho hacer click-derecho en AnnounceFlags y seleciona Modificar
  4. En el editor selecciona el valor DWORD, y digita A en la caja de texto, y luego click OK
  5. Cerrar el regedit
  6. En el ventana de comandos prompt, digita el siguiente comando para reiniciar el servicio
    net stop w32time && net start w32time
    

Fuente:
https://support.microsoft.com

Directiva de Seguridad Local (no se puede modificar)

Instando Windows Server 2012 Standard y cuando quiero quitar de las Directivas de Seguridad Local\Directivas de cuenta\Directiva de contraseñas\La contraseña debe cumplir los requisitos de complejidad (Habilitada); me aparece deshabilitada esta opcion, como que no puedo quitarla. Antes en el WS2008 podía modificarlo sin problemas, aqui les dejo un Tip’s.

 USE Master
GO
ALTER LOGIN myUser WITH PASSWORD = 'myPassword'
GO
ALTER LOGIN myUser WITH
      CHECK_POLICY = OFF,
      CHECK_EXPIRATION = OFF;

Configurar una IP statica en Centos 7

En el caso de CentOS el archivo de configuracion se encuentar en la carpeta /etc/sysconfig/network-script/ y luego se tiene que modificar la interface que nos indica el ipconfig, en nuestro caso tenemos que modificar el archivo

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
Contenido ORIGINAL

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=8fcae283-8f5c-417c-9d9d-683b82bcb451
DEVICE=eth0
ONBOOT=no
Los datos a modificar son:

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=8fcae283-8f5c-417c-9d9d-683b82bcb451
DEVICE=eth0
ONBOOT=yes
#Ahora aqui agregamos la demas informacion
ONBOOT="yes"
IPADDR="192.168.111.152"
NETMASK="255.255.255.0"
GATEWAY="192.168.111.255"
DNS1="8.8.8.8"

Luego de esto reiniciamos los servicios.

systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl restart network
chkconfig network on

Backup y restauración de buzones en Zimbra Open Source Edition

La version Open Source de Zimbra es una excelente plataforma de correo y colaboración. Aunque no incluya las utilidades para realizar backups y restauración, al igual que la versión Network Edition, es posible respaldar y restaurar las cuentas de correo utilizando zmmailbox.

Los respaldos realizados con zmmailbox incluyen:

Todas las carpetas de correo (Inbox, Sent, Draft, etc)

  • Las entradas de la libreta de direcciones
  • Las entradas del calendario
  • Las Tareas
  • Los archivos de Mi Maletín

Con esto podemos respaldar y restaurar lo mas importante y valioso para nosotros: la información, ya sea correo, contactos, eventos de calendario, etc.

Backup

Para realizar el respaldo de una cuenta de correo se debe ejecutar lo siguiente como usuario zimbra:

zmmailbox -z -m cuenta@servidor.com getRestURL -o cuenta.tgz "//?fmt=tgz"

cuenta@servidor.com: es la cuenta a respaldar
cuenta.tgz: es el nombre del archivo donde se guardará la información de la cuenta
«//?fmt=tgz»: es el formato en que queremos salvar el respaldo. Puede ser tgz o zip

Restauración

Para restaurar se debe utilizar el mismo comando pero haciendo una pequeña variación las opciones y los argumentos:

zmmailbox -z -m cuenta@servidor.com postRestURL  “//?fmt=tgz&resolve=reset” cuenta.tgz

Las opciones de resolve pueden ser:

modify: modifica el elemento viejo
replace: borra el elemento viejo y lo vuelve a crear
reset: borra todos los elementos de la carpeta antes de importar
skip: no importa los elementos duplicados

En mi caso particular, y para un cliente, he creado y probado un script (muy básico…) para hacer las copias de todos los buzones y borrar los anteriores a 15 días. Y como tal, se debe considerar una versión pre-alfa.

#/bin/bash
##
# JSJ 2012

BACKUP_DIR=/opt/backup
DATE=`date +%d%b%Y`
# LOG=$BACKUP_DIR/$DATE/$DATE.log
# touch $BACKUP_DIR/$DATE/$DATE.log
mkdir $BACKUP_DIR/$DATE
touch $BACKUP_DIR/$DATE/$DATE.log
LOG=$BACKUP_DIR/$DATE/$DATE.log
OLD=$(date +%d%b%Y –date=’15 days ago’)
# Generamos una lista de usuarios y la guardamos en usuarios.txt
/opt/zimbra/bin/zmprov -l gaa >> $BACKUP_DIR/$DATE/usuarios.txt
for user in `cat $BACKUP_DIR/$DATE/usuarios.txt`; do
echo ” Generando backup de ” $user “” >> $LOG
# Exportamos los buzones de cada usuario en un fichero con el formato usuario.tgz.
sudo -u zimbra /opt/zimbra/bin/zmmailbox -z -m $user getRestURL “//?fmt=tgz” > $BACKUP_DIR/$DATE/$user.tgz
done
if [ -d $BACKUP_DIR/$OLD ] # Si el directorio existe..
then
echo “Borramos la carpeta de hace 15 días.” >> $LOG
rm -rf /opt/backup/$OLD
else
echo “La carpeta de hace 15 días no existe. No hacemos nada.” >> $LOG
fi

Configurar la interfaz de red en impresoras EPSON con PrintServer incorporado

Las impresoras EPSON que bienen con Wifi/lan incorporado por defecto traen activado su Cliente DHCP, y cuando ingresas a su panel via web solo muestra informacion, pero NO te permite modificar parametro alguno.

http://192.168.1.201

Ahora para poder modificar la configuración de la interfaces de red debemos de usar el programa Epson NetConfig v2.2b

La entidad de seguridad de base de datos posee esquemas en la base de datos. No se puede quitar.

Descripción del problema: Cuando ha intentado colocar un usuario, tienes este mensaje:

Error: 15138 La entidad de seguridad de base de datos posee esquemas en la base de datos. No se puede quitar.

Causa: Eso significa, que está intentando eliminar un usuario de poseer un esquema. Con el fin de colocar el usuario, tienes para encontrar el esquema que se ha asignado y a continuación, transferir la propiedad a un otro usuario o para quitarlo.

Resolución: Usted puede corregir el problema después de dos maneras.

Secuencia de comandos: Puede averiguar qué esquema es propiedad de este usuario con la consulta siguiente:

SELECT name FROM  sys.schemas WHERE principal_id = USER_ID(‘myUser’)

A continuación, utilice los nombres que se encuentra desde la anterior consulta a continuación en lugar de la SchemaName a continuación. Y eliminar su usuario.

   
ALTER AUTHORIZATION ON SCHEMA::SchemaName TO dbo 
GO
DROP USER myUser

Con Management Studio:

  • Explorador de objetos >> Expanda el [databasename] >> Seguridad.
  • Haga clic en Esquemas.
  • En la ventana de resumen, determinar que son propiedad de Schema(s) por el usuario y puede cambiar el propietario o quitar el Scheme(s).
  • Si son esquemas de sistema, sugiero a cambiarlos a ‘dbo’.
  • Quite el usuario.

Más detalles acerca de los esquemas en el BOL:
http://msdn2.microsoft.com/es-es/library/ms190387.aspx

Cambiar Unity a Gnome3 en ubuntu 16.04

Para esto sencillamente removemos los siguientes paquetes

sudo apt-get remove --purge unity
sudo apt-get remove --purge gnome-shell
sudo apt-get remove --purge lightdm
sudo apt-get autoremove
sudo reboot

Ahora instamos gnome 3

sudo add-apt-repository ppa:gnome3-team/gnome3
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install gnome3-session
sudo apt-get install gnome-shell

O tambien se puede usar solo el comando

sudo apt-get install gnome-panel

Obteber el numero de serie del disco duro

Este es una opciones para obtener el numero de serie del disco duro, para ejecutarlo en VisualBasic6

Option Explicit
'
'HD Serial Number.
Private Declare Function GetVolumeInformation _
        Lib "kernel32.dll" Alias "GetVolumeInformationA" ( _
              ByVal lpRootPathName As String, _
              ByVal lpVolumeNameBuffer As String, _
              ByVal nVolumeNameSize As Integer, _
              lpVolumeSerialNumber As Long, _
              lpMaximumComponentLength As Long, _
              lpFileSystemFlags As Long, _
              ByVal lpFileSystemNameBuffer As String, _
              ByVal nFileSystemNameSize As Long) As Long

Private Sub Command1_Click()
    'HD serial number. * See: Function GetSerialNumber & Declarations.
    MsgBox "" & GetSerialNumber("C:\"), vbOKOnly, "HD Serial Number"
End Sub

Function GetSerialNumber(strDrive As String) As Long
    Dim SerialNum As Long
    Dim Res As Long
    Dim Temp1 As String
    Dim Temp2 As String
    Temp1 = String$(255, Chr$(0))
    Temp2 = String$(255, Chr$(0))
    Res = GetVolumeInformation(strDrive, Temp1, _
    Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))
    GetSerialNumber = SerialNum
End Function