jueves, 17 de enero de 2013

Matlab SOAP Client

Un SOAP client en Matlab que funciona. Encontré este código en internet y lo he tenido que tocar un poquito hasta que por fin ha funcionado y conecto perfectamente con un servidor SOAP. He sudado sangre hasta que ha funcionado, espero que os sirva y que no tengáis que sudar vosotros también.

Saludos!


function [IN OUT]=SOAPClient()

%-------------------------------------------------------------

import java.io.*;
import java.net.*;
import com.mathworks.mlwidgets.io.InterruptibleStreamCopier;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
%-------------------------------------------------------------


IN='';
OUT='';
endpoint='https://www.miendpoint.com?wdsl';
soapAction='mySOAPAction';



url = URL([],endpoint, sun.net.www.protocol.https.Handler);

com.mathworks.mlwidgets.html.HTMLPrefs.setProxySettings

mwtcp = com.mathworks.net.transport.MWTransportClientPropertiesFactory.create();
proxy = mwtcp.getProxy();

if isempty(proxy)
    httpConn = url.openConnection;
else
    httpConn = url.openConnection(proxy);
end


httpConn.setRequestProperty('Content-Type','text/xml; charset=utf-8');

httpConn.setRequestMethod('POST');
httpConn.setDoOutput(true);
httpConn.setDoInput(true);

% Aquí le pasas la petición al servidor en formato XML
message=xmlread('SOAP_Request.xml');

toSend = serializeDOM(message);
toSend = java.lang.String(toSend);
b = toSend.getBytes('UTF8');
IN=char(b');

try
    outputStream = httpConn.getOutputStream;
    outputStream.write(b);
    outputStream.close;
    disp('Mensaje enviado')
catch e
    exception = regexp(e.message, ...
        'Java exception occurred: \n(.*?)\s*\n','tokens','once');
    if ~isempty(exception)
        exception = exception{1};
        if strcmp(exception, ...
                'java.net.ConnectException: Connection refused: connect')
            error('MATLAB:callSoapService:ConnectionRefused','Connection refused.');
        end
        if strcmp(exception, ...
                'ice.net.URLNotFoundException: Document not found on server')
            error('MATLAB:callSoapService:UrlNotFoundOnServer','The requested URL was not found on this server.')
        end
        host = regexp(exception,'java.net.UnknownHostException: (.*)','tokens','once');
        if ~isempty(host)
            error('MATLAB:callSoapService:UnknownHost','Unknown host: %s',host{1})
        end
        error('MATLAB:callSoapService:Exception',exception)
    else
        rethrow(e)
    end
end
try
    disp('Recibiendo mensaje...');
    inputStream = httpConn.getInputStream;
    disp('Mensaje recibido!!')
    byteArrayOutputStream = java.io.ByteArrayOutputStream;
    
    isc = InterruptibleStreamCopier.getInterruptibleStreamCopier;
    isc.copyStream(inputStream,byteArrayOutputStream);
    inputStream.close;
    byteArrayOutputStream.close;

    OUT=byteArrayOutputStream;
    
    message = e.message;
    t = regexp(message,'java.io.IOException: (.*?)\n','tokens','once');
    if ~isempty(t)
        message = t{1};
    end
    


%================================================================
function s = serializeDOM(x)

domSource = javax.xml.transform.dom.DOMSource(x);
tf = javax.xml.transform.TransformerFactory.newInstance;
serializer = tf.newTransformer;
serializer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING,'utf-8');
serializer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT,'yes');

stringWriter = java.io.StringWriter;
streamResult = javax.xml.transform.stream.StreamResult(stringWriter);

serializer.transform(domSource, streamResult);
s = char(stringWriter.toString);

lunes, 14 de enero de 2013

VT-x features locked or unavailable in MSR

Este mensaje tan bonito me salía una y otra vez cada vez que intentaba arrancar mi máquina virtual de ubuntu  sobre Windows 7 que funcionaba perfectamente antes de que un repentino corte de luz me fastidiara todas mis máquinas virtuales. El caso es que no podía reinstalar mis apreciados back-ups. Seguía saliendo este error:

VT-x features locked or unavailable in MSR.
(VERR_VMX_MSR_LOCKED_OR_DISABLED)

The details are:

Result Code: 
E_FAIL (0x80004005)
Component: 
Console
Interface: 
IConsole {1968b7d3-e3bf-4ceb-99e0-cb7c913317bb}


Pues bien, por lo visto al reiniciarse bruscamente el PC se modificaron las variables de la BIOS. Lo que hay que hacer (por lo menos a mí me ha servido) es:

  • Reinicias el PC y dándole a F10 o a supr, entras en la bios
  • Buscas la variable VT y la habilitas (dependiendo de cada PC estará en un lugar o en otro). Ten paciencia y lee todos los recovecos de tu BIOS.
  • Guardas los cambios
Y ya está, espero que le sirva a alguien más.

¡Hasta otra!

viernes, 9 de noviembre de 2012

Cambiar el proxy para Filezilla Client

Hola a todos,

Para cambiar el proxy en Filezilla Client hay que hacer lo siguiente:

  1. Edición > Opciones
  2. Conexión
  3. Proxy genérico -> lo deshabilitas marcando "Ninguno"
  4. FTP > Proxy FTP -> marcas la opción usuario@servidor y abajo introduces tu servidor proxy
Y como diría Elvisa Yomastercard, espero que os haya gustado... este tutorial.

Saludos!!

martes, 6 de noviembre de 2012

Cambiar el proxy en Windows XP

He estado un ratillo buscando por internet para cambiar el proxy de mi PC, y la única forma que ha resultado ha sido esta. Espero que le sirva a alguien más:
  1. Entras en tu PC con cuenta de administrador.
  2. Le das a Inicio > Panel de Control > Opciones de Internet
  3. Conexiones > Configuración de LAN
  4. Marcas la opción de "Usar un servidor proxy para LAN"
  5. Escribes la dirección de tu nuevo proxy y el puerto.
  6. Aceptas en las dos ventanas.
  7. ¡LISTO!
Esta es la web donde lo he encontrado.

¡Saludos!

miércoles, 10 de octubre de 2012

IRAF: fitcoords y segmentation violation error

¡Buenas noches!

Estoy reduciendo espectros con IRAF y me he encontrado con un problema cuya solución no he encontrado en la web. Resulta que después de hacer identify y reidentify para enderezar el arco del espectro del neón, no era capaz de hacer fitcoords porque me lanzaba el siguiente error:

Longslit coordinate fit name is neon.
Longslit database is database.
Features from images:
neon
ERROR: segmentation violation
called as: `fitcoords (mode=h)'
 


Bicheando en internet no he encontrado solución, pero tras mucho luchar me he dado cuenta de que si las líneas del neón están saturadas, el fitcoords no funciona. Así que le he pasado un espectro sin saturar y funciona perfectamente.

Espero que os haya servido.

Saludos!

jueves, 2 de agosto de 2012

ICPIG 2013

The XXXI edition of the International Conference on Phenomena in Ionized Gases (ICPIG) is held in Spain for the first time after the first ICPIG that took place back in 1953 in Oxford (UK) 60 years ago. The ICPIG, a tradicional International conference with a remarkably long history, is held every two years and covers nearly all aspects of phenomena in ionizad gases from fundamentals to applications. The ICPIG topics are grouped into four major sections (A. Fundamentals; B. Modeling, Simulation and Diagnostics; C. Plasma Sources and Discharge Regimes; D. Applications) with each major section structured into several sub-topics. 

The last three ICPIG editions were held in Prague (Czech Republic, 2007), Cancún (Mexico, 2009) and Belfast (UK, 2011).


Please, to get further information, visit www.icpig2013.net.

martes, 15 de mayo de 2012

Controlando una cámara L´Heritier con Matlab a través del puerto serie

Hola a todos,

Gracias al SW Hércules terminal he conseguido ver las tramas que escupe mi cámara L´Heritier. La idea era hacer un SW de control de la cámara para no tener que usar la kk de programa que viene por defecto.

Se hace así:

s=serial('COM3');         % COM donde tenemos el puerto serie
s.BaudRate=115200;        % Tasa de tranmisión para la L'Heritier
set(s, 'Parity', 'even'); % Paridad par


% tramahex=['AA','AA', ... , 'BB']; % Trama en hexadecimal de lo que queremos enviar 


trama= hex2dec(tramahex);
fwrite(s,trama);


fclose(s);


Y ya está, espero que os sirva.


Saludos!