Documentation is another way of testing

Writing kino documentation is already boring. But while I was trying to explain how the whole framework works, I’ve found one bug and several other things to improve.

Advertisements

kino – Actors Framework

Due to recent involvement in a project, which was heavily using Windows Workflow Foundation and my “huge love” to this technology, I decided to finally implements the idea, which I had several years ago…

Meet kino, an actor-based framework!

Basic functionality is already developed: you can start creating own Actors, host them in process and organize with the help of Rendezvous service into a network of actors. Quite soon preview versions of the NuGet packages of the framework will be available.

ESTA tennis Slowakei review. This is madness!!!

(Esta, Slowakei, tennis, review)

I would like to share my sad experience which I had with Esta, when trying to arrange my vacation 28.05-02.06.2009

My wife and me decided to have a short sporting holidays and play tennis. In a big sporting store (Sport Experts, Wien) I saw an Esta booklet, which advertised different kinds of sporting vacations. We’ve slected Slowakei, Stupava hotel «Parkhotel».

On Esta site http://www.esta.net hotel was announced as a ***-stars one. It has a lot of sand courts as well as indoor courts. The latter was very important for us, hence the spring was very rainy this year. Together with the hotel voucher we received additional information, which stated that all guests MUST have tennis shoes for sand and indoor courts. So, we had to buy another two pairs of shoes for each of us.

Right on our arrival we’ve been unpleasantly surprised: hotel entrance was decorated only with ** (two!) stars, but not with the declared ***. I was even more surprised when starting to write this post, I’ve visited Esta site once again. The hotel had already **** (FOUR) starts! Really nice and quick upgrade 🙂

Despite small number of guests in the hotel, we had to wait for our meal for 40 minutes. The food itself was disgusting: half-fried chicken, over-spiced soup, etc… At the same time the hotel was declared as “kids-friendly”. I’m not sure this is a healthy food for adults, not saying about the kids.

From bad to worse. It was raining all day long and sand courts turned into  sand beaches. No playing, no trainings. To my question about the indoor courts I’ve received an answer, that they are busy with handball or some other, not tennis related competitions. We felt really bad…

Esta office was placed on the same floor we lived. I went for the explanations. Of course, to all my questions I’ve received very prompt and useless answers. The hotel was “awarded” with three starts according to “there” classification, but not to the world-wide excepted. And because it’s only a ***-hotel, they don’t have a first-class cook. (Of course, it’s a rocket-science to fry chicken legs)

The only positive effect of that slam was the waiter speed-up.

It was raining for a second day in a row and we decided to go back home and not wasting our time and money.

Don’t go for Esta, it really SU…KS!!!

ESTA теннис Словакия отзывы. This is madness!!!

(Esta, Словакия, теннис, отзывы)

Хочу поделиться некоторым прескорбным опытом, который я поимел от отдыха (28.05 – 02.06.2009), организованного компанией Esta.

Мы с семьей решили устроить себе небольшой спортивный отдых и поиграть в теннис. В одном большой спортивном магазине (Sport Experts, Wien) мне попался на глаза рекламный буклет компании Esta, которая предлагала разнообразный спортивный отдых. Наш выбор пал на Slowakei, Stupava, отель Parkhotel.

Итак, отель на сайте http://www.esta.net был заявлен как ***. Отель располагает крытыми кортами, что для нас было решающим моментом, поскольку весна была очень дождливая. Вместе с ваучером на отдых мы по почте получили дополнительную информацию, в которой говорилось, что все, приезжающие на теннисный отдых, ОБЯЗАНЫ иметь две пары обуви: для крытых и песочных кортов. Нам пришлось купить еще 2 пары кроссовок.

Сразу по приезде в отель мы были неприятно удивлены: на входе красовались только ** (две!) звезды, а не ***, заявленные в рекламе. Еще больше я был “очарован” когда начал писать этот пост и снова зашел на сайт Esta. Отель уже значится как **** (четырех!!!) звездочный! Это просто чудо, как братья словаки быстро успели обновить отель.

Не смотря на очень небольшое количество людей в отеле, обсуживали в ресторане очень медленно. Еду приходилось ждать по 40 минут. Само же качество еды было просто отвратительное: недожаренная курица, очень острый суп и т.д. И все это при том, что отель заявлен как kids-friendly? Простите, ЭТО тоже детям давать есть???

Дальше-больше. День подряд непрекращаясь лил дождь. Корты превратились в бассейны и тренировки откладывались. На мой вопрос по поводу использования закрытых кортов мне ответили, что там сейчас проходят не то гандбольные, не то еще какие-то, абсолютно не относящиеся к теннису, соревнования. Настроение было абсолютно испорчено.

Как на “счастье”, офис недобросовестной компании Esta находился как раз на этаже, где мы жили. Я пошел разбираться. На вопрос про количество звезд, мне ответили, что это ИХ, видите ли, классификация, которая может и не совпадать со всемирно принятой. Вот, только не понятно, зачем это надо? По поводу нареканий на качество еды, мне сказали, что конечно, есть “проблемки” и повор не супер-класс. Гы-гы, конечно, нужен повар-француз, чтобы нормально пожарить обычные куриные ножки 🙂 Вобщем, на все вопросы мне был дан абсолютно квалифицированный и бесполезный ответ.

Единственным плюсом данной разборки было то, что официант реально начал шевелиться быстрей.

Дождь лил не переставая, платить за отвратительную еду и ждать в надежде солнца мы не хотели. Уехали раньше, пробыв в горе-отеле всго 2 дня 😦

Никому не посоветую иметь дело с компанией Esta! Esta – really su…ks!!!

Posting arbitrary messages to any receiver



+ (id)sendToDelegate:(id)receiver message:(SEL)message arg1:(id)arg1, ...
{
   if (![receiver respondsToSelector:message])
   {
      @throw [NSException exceptionWithName:@"DelegaterException"
                   reason:[NSString stringWithFormat:@"Receiver doesn't respond to message %s",
                              sel_getName(message)]
                 userInfo:nil];
   }

   NSMethodSignature* sign = [receiver methodSignatureForSelector:message];
   NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:sign];
   [invocation setSelector:message];
   [invocation setTarget:receiver];
   [invocation setArgument:&arg1 atIndex:2];

   id arg;
   va_list args;
   va_start(args, arg1);
   int i = 3;
   while (arg = va_arg(args, id))
   {
      [invocation setArgument:&arg atIndex:i++];
   }
   va_end(args);

   [invocation invoke];
   id result;
   [invocation getReturnValue:&result];

   return result;
}

Adding SOAP Header in Java

Simple minimal code to add your own SOAP header



// Security	token
String token;
// MyService and MySoapService are stubs generated from WSDL
MyService service = new MyService();
MyServiceSoap ep = service.getMyServiceSoap();

Binding binding = ((BindingProvider) ep).getBinding();
List handlers = binding.getHandlerChain();
handlers.add(new MySOAPHandler(token));
binding.setHandlerChain(handlers);

Here is the code of the MySOAPHandler class used to intercept messages and actually add SOAP header



public class MySOAPHandler implements SOAPHandler {

	private String token;

	public DHSOAPHandler(String token) {
		this.token = token;
	}
	public boolean handleMessage(SOAPMessageContext messageContext) {
		SOAPMessage
		msg = messageContext.getMessage();
		if ((Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)){
			try {
				SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
				SOAPHeader header = envelope.addHeader();
				SOAPElement el = header.addHeaderElement(envelope.createName("TicketHeader",
									"", "http://ws.service.com/"));
				el = el.addChildElement(envelope.createName("Ticket", "", "http://ws.service.com/"));
				el.setValue(token);
				msg.saveChanges();
			}
			catch (SOAPException	e) {
				return false;
			}
		}
		return true;
	}

	public boolean handleFault(SOAPMessageContext messageContext) {
		return true;
	} 

	public void close(MessageContext messageContext){
	}
	// I'm not quite sure about what should this function do, but I guess something like this...
	public Set getHeaders(){
		Set headers = new HashSet();
		headers.add(new QName("https://ws.service.com/", "TicketHeader"));
		return headers;
	}
}

The structure of the header to be added is



<TicketHeader>
	<Ticket>OD01096347CCA</Ticket>
</TicketHeader>