k

North Korea, The Interview and Movie Ethics

Its been quite a while since I blogged .. I'm going to try to write a bit more consistently from now (try being the key!). I thought I'll start with a light topic!

So I watched the now infamous The Interview two nights ago. I'm no movie critic, but I thought it was a cheap, crass stupid movie with no depth whatsoever. More of a dumbass slapstick movie than anything else.

Again, I'm no movie critic so I don't recommend you listen to me; watch it and make up your own mind :-). I have made up mine!

HOWEVER, I do think the Internet literati's reaction to this movie is grossly wrong, unfair and arrogant.

Has there ever been any other Hollywood movie where the SITTING president of a country is made to look like a jackass and assassinated in the most stupid way? I can't think of any movies like that. In fact, I don't think Bollywood or any other movie system has produced such a movie.

When Hollywood movies have US presidents in them they're always made out to be the hero (e.g. White House Down) and they pretty much never die. If they do die, then they die a hero (e.g. 2012) in true patriotic form.

I don't recall seeing a single movie where David Cameron or Angela Merkel or Narendra Modi or any other sitting president was made to look like a fool and gets killed as the main point of the movie (or in any other fashion).

I believe the US Secret Service takes ANY threats against the US president very seriously. According to Wikipedia, a threat against the US president is a class D felony (presumably a bad thing). I've heard of students who send anonymous (joking) email threats get tracked down and get a nice visit.

So, suppose Sony Pictures decided to make a movie which shows President Obama being a jackass and then being killed? How far would that go before the US Secret Service shuts it down?

In my view the fact that this movie was conceived, funded and made just goes to show how little respect the US system has for people that are not lined up in the US way. Its fine for the US government, and even the US people, to have no respect for some country, its president or whatever, but I have to agree with North Korea when they say that this movie is a violation of the UN charter:

With no rhetoric can the U.S. justify the screening and distribution of the movie. This is because "The Interview" is an illegal, dishonest and reactionary movie quite contrary to the UN Charter, which regards respect for sovereignty, non-interference in internal affairs and protection of human rights as a legal keynote, and international laws.
– NORTH KOREA NATIONAL DEFENCE COMMISSION SPOKESMAN
    (From: http://www.itv.com/news/story/2014-12-27/north-korea-insults-obama-and-blames-us-for-internet-outages/.)

    Would all the Internet literati who hailed the release of the movie act the same way if Bollywood produced a movie mocking Obama and killing him off? If not, why the double standard??

    Its disappointing that thinking people also get caught up in the rhetoric and ignore basic decency. Just to be clear- I'm not saying North Korea is a great place. I have no idea what things are really like there. What I do know is that I don't trust the managed news rhetoric that is delivered as fact by CNN, Fox, BBC, Al Jazeera or anyone any more about any topic. This is after observing how Sri Lanka was represented in various of these channels during the war and after being here to observe some side of it myself. After Iraq (where are those WMDs now?) you'd think that smart people wouldn't just believe any old crap that's put out .. I distinctly remember watching the news conference (broadcast on BBC) immediately after Colin Powell made his speech with pictures to the UN Security Council where the then Iraqi Foreign Minister (can't remember his name - fun looking dude) went thru each picture and gave an entirely different explanation. We now know who was telling the truth. I try hard not to get caught up in any of the rhetoric as a result now.

    There's an entirely different topic of whether the North Koreans attacked Sony Pictures' network and whether the US government hackers shut down their Internet. It seems that the general trend (as of today) is that it wasn't the North Koreans, despite what the FBI said: http://www.cnn.com/2014/12/27/tech/north-korea-expert-doubts-about-hack/index.html.

    So I'm with the North Koreans on this one: This movie should not have been conceived, funded and produced. I don't condone the hackers' approach for trying to stop it; instead Sony Pictures should've had more ethics and not done it at all. So, IMO: Shame on you Sony Pictures Entertainment!




    k

    Understanding the (Sri Lankan) IT Industry

    In the last 3+ weeks there's been war raging in the IT Crowd in Sri Lanka about the proposed CEPA/ETCA thing: Basically the part of a free trade agreement with India which might allow Indians in the IT and ship building industries to work freely in Sri Lanka. I know nothing about building ships so I don't have any opinion about whether the proposal addresses a real problem or not. I do know a thing or two about "IT" and am most certainly opinionated about it :-).

    I also know little real info about CEPA/ETCA because the government has chosen to keep the draft agreement secret. Never a good thing.

    There have been various statements made by various pundits, politicians, random Joes (Jagath's I guess in Sinhalese ;-)) and all sorts of people about how the Sri Lankan IT crowd is
    • Scared to their wits that their jobs will be taken by Indians
    • Looking for the state to give them protection from global competition
    • Unable to compete with the world's IT industry without help from Indians
    • Unpatriotic because a lot of them leave the country after getting quality free education
    • Living in a bubble because some of them get paid Rs. 150k/month straight out of university
    • Etc. etc..
    I will address a lot of these in subsequent blogs (hopefully .. every time I plan to blog a lot that plan gets bogged on).

    The purpose of this blog is to try to educate the wider community about the mythical thing called the (Sri Lankan) "IT industry". For each area I will also briefly touch upon the possible Indian relationship. Of course this is all my opinion and others in the industry (especially in the specific areas that I touch upon) may vehemently disagree with my opinion. Caveat emptor. YMMV.

    So here goes an attempt at a simple taxonomy:
    • Hardware Resellers/Vendors
    • Hardware Manufacturers
    • Software Resellers/Vendors
    • Software Manufacturers
    • System Integrators - Local Market Focused
    • System Integrators - Outsourcers
    • Enterprise Internal IT Teams
    • IT Enabled Services (ITES) and Business Process Outsourcers (BPO)
    • Universities
    • IT Training Institutes
    This became way more of a treatise than I intended. I'm sure its full of things that people will disagree with. I'll try to update it based on feedback and note changes here.

    Hardware Resellers/Vendors

    IBM Sri Lanka has been in Sri Lanka for more than 40 years I think. I imagine they came when Central Bank or some big organization bought an IBM mainframe. I remember seeing Data General, WANG, and a host of other now-dead names growing up (70s and 80s). 

    These guys basically import equipment from wherever, sell it to local customers and provide on-going support and maintenance. 

    Some of these players don't sell entire computers or systems but rather parts - visit Unity Plaza to see a plethora of them.

    Not too many Indian hardware brands being sold in Sri Lanka AFAIK but probably MicroMax (the phone) is an exception. So having the Indian IT Crowd here really has no impact on this segment.

    Hardware Manufacturers

    These are people who make some kind of "IT thing" and sell it locally or export it. When it comes to technology no one makes all of anything any more - even an iPhone consists of parts from several countries and is finally assembled in China. Same with any computer you buy or any phone you buy.

    There are a few people here who "make" (aka put together / assemble) computers and sell under their own brand. There are also a few who export them (I believe).

    There are also some others who make specific hardware devices that target specific solutions - best is the company that makes various PoS type systems that get sold as Motorola.

    Fundamentally not many hardware manufacturers in Sri Lanka yet AFAIK. In any case, they're not likely to be affected by Indians being in Sri Lanka as this is a very specialized market and its unlikely the specialized skill will migrate to Sri Lanka given that skill base has excellent opportunities anywhere. If at all, electronics related graduates in Sri Lanka do not have enough good career opportunities yet as we don't have many companies buildings things yet.

    Software Resellers/Vendors

    Takes Microsoft Sri Lanka or the 100s of other agents of global software brands that sell their wares in Sri Lanka. These guys get a cut out of the sale in some fashion. 

    Yes of course some of them sell (very good) Indian software. For example, a bunch of banks use InfoSys' Finnacle (sp?) core banking system.

    Software, used well, can increase any organization's productivity (after all, software is eating the world and all that). If there are Indian companies which have technology that can be used to improve LK orgs productivity - by all means do come and sell it here! That may even require Indian engineers to come and install / customize them - no problem at all.

    So, this segment will simply welcome more Indian presence in terms of companies. In terms of the Indian IT Crowd coming here for this segment - I guess experienced sales people are solutions engineers to help sell and deploy the Indian products are always welcome. To be successful the company will need to send good people (good luck selling software if the sales engineer sucks) - and good people are welcome anywhere.

    I should mention the global SaaS software products (e.g. Salesforce, Netsuite, Google Apps, Office 365 etc.). Most of those don't have regional sales teams etc. - you just go to the website and sign up and use it. However, they will often have local system integrators who know how to help deploy, tune, customize and integrate those systems to whatever enterprise systems are already in place.

    Software Manufacturers

    These guys make some kind of software product and sell it to whoever will buy it. More and more are selling them online as SaaS offerings only.

    Competing in the software product market means you just need to build a better product or at least have a good enough product that's cheap. To create great products you need great people who think and innovate faster and better than anyone else out in the world. More and more pretty much every product competes globally as even the smallest customer can simply use globally available SaaS offerings (some made in Sri Lanka even). 

    Every idea someone has for a product in Sri Lanka is guaranteed also conceived by at least multiple Indians. And multiple Americans. And multiple Europeans. Etc. etc..

    "Ideas are cheap. Execution is not." - Mano Sekaram at a talk he gave at the WSO2 Hackathon a few years ago.

    To make products and get them to market is not easy. Will having some Indian employees help? SURE - if they're awesome people. The 2m people who applied for a clerical job really wouldn't help. Will marketing experience help? Of course - but again high quality product marketing experience is hard to come by in Sri Lanka, in India and even in California (speaking from personal experience). 

    Despite idiotic politician statements about how advanced the Indian IT industry is, they are much more a global outsourcer and BPO operator than a product development country. That's changing rapidly but the numbers in the product side of the equation are much lower than the other side. In fact, I'd venture to say that as a %ge there are more product companies in Sri Lanka's IT ecosystem than in India's. In any case, the word "advanced" is very hard to quantify in the software world.

    So sure, let anyone come - but good luck getting too many jobs in product companies that have no patience or interest with mediocre people. You need a few superb people to build a great product and fewer great people to market and sell it. If you're a super engineer or a marketer in India, there are tons of opportunities for you in India already, so the only way you'll come is if we offer a better total package: Check out WorkInSriLanka. I hope you come and stay and never leave! 

    For WSO2, we're a BoI company. If we find a high quality person from ANYWHERE who wants to work in Sri Lanka we can bring them over. Piece of cake really - visa wise. We will NOT pay higher salaries for foreign people though - something that I know many do and something I soooooo detest. Sri Lanka seems to love reverse discrimination.

    System Integrators - Local Market Focused

    These companies take software and hardware from whoever and produce solutions for customers. These are systems that solve a particular business problem for some organization. For example, the vehicle registration system at the Department of Motor Vehicles.

    The work these guys do involve working with the customer to understand the problem domain, figure out a good solution architecture, figure out which technology to apply and then to build the full solution. All very important stuff!

    Who works in these places? Typically a combination of business analysts, architects, engineers of all kinds (software, QA, UI etc. etc.), project managers and so on.

    Sri Lankan enterprises are quite slow to adopt software technology. This (IMO) is primarily because labor costs are low, because customer expectations are still not hard meaning competition is not that intense as it is in say US. That will change and we will need a LOT more people to integrate and build solutions for local companies. Can we meet the demand with local skill - my guess is yes. If we need a few more, the integrator companies can easily import people too.

    There is one segment of this market that is special however. Small enterprises are also picking up low end solutions. These are often implemented by the owners daughter/son or niece/nephew type person. Basically some trusted computer geeky relative who "automates" the place in some form. That used to be with an Access database + VB type thing .. not sure what is in play today in that space.

    That market is critical to help develop the local IT Crowd as it gives business (aka employment) to many many relatively low skilled yet value-adding people. The people working in these places don't need 4 year CS degrees. They're simply people with a bit of knowledge (acquired from a tutory type place) and a good knack for computing. Its critical to support and protect this community because they deliver technology to the wider mom&pop / small kade business community. 

    I think a bunch of lower cost people from India working in Sri Lanka in this market could be a negative thing as it could threaten employment for low end IT workers. However, many of these deals are struck based on trust and relationships so it'll be really hard for anyone to break in.

    System Integrators - Outsourcers

    These guys take work from a foreign country (typically a more wealthy country but could be one that simply has a dearth of technical capacity) and bring it here to do the work. Virtusa is of course the largest (~3000 or so people AFAIK) but there are TONS of smaller players employing a few 10s of people and a few dozen or so in the 100s range I think.

    The smaller ones always start with a single contract the owner managed to get from his/her work in the foreign country or thru a friend/relative outside. Do one task well at 1/5th to 1/3rd the price in the US and you can clearly keep get more business. Capitalism at work.

    The bigger of these companies are great places to work for the best of the best. They may give opportunities to learn a ton of stuff, travel, develop soft skills etc. etc..  Lots of passionate employees who will not move easily.

    The middle sized ones (> 25, < too many 100s) are usually great companies. They pay people well, they provide a quality work environment, they have passionate employees and often specialize in one or few areas (e.g. Alfresco or Mobile apps or whatever) and therefore command a higher charge out rate. 

    The small companies (<= 25) tend to be more sweat-shop like from what I've seen - pay the people as little as possible and use crazy micro project management to deliver. No passionate employees typically. Its just a job that gives a paycheck for people who are relatively low skilled (and low initiative powered too).

    Virtusa has offices in India too with like 7000 people I think. If they want to hire Indians they can hire them there. If they want to bring people down here they can do it and undoubtedly do it already. (You need to go thru the Board of Investment but its trivially easy. FAR FAR FAR easier than hiring a foreigner in the US .. or I imagine India.)

    Does this part of the IT Crowd get affected by possible mass migration of the Indian IT Crowd to Sri Lanka? Not for the Virtusa's of the world IMO. However, for the smaller players, the small company CEOs who are milking money off the small outsourcing contracts, yes getting cheaper invisible people will be better for them. That could indeed mean a reduction in employment opportunities for the lower end of the technical community who work in these places as there indeed will be Indians willing to work for less (see Two million apply for 300 clerical jobs and 80% of Indian Engineering Graduates are Unemployable as recent examples).

    It would be great to have multiple Virtusa's in Sri Lanka. In 2009, Mphasis (apparently India's 7th largest service provider then) tarted operations in Sri Lanka with intent to hire 2000 but AFAIK have packed up and gone or are nowhere as big. I'm sure someone who knows will reply and I'll add a note.

    Would Infosys or TCS or whatever open up here if they have to bring people from India to Sri Lanka? I can't see why .. then why not just execute that in India itself. What am I missing in that equation?

    So I cannot see the larger players affected by this. The smaller players (and by that I mean the really small ones .. < 25 people) will probably benefit by getting cheaper workers. Will we see tons of iOS developers in LK with this? No, because they're a scarce commodity anywhere. Period. For the middle sized guys (> 25, < too many 100s) certainly getting more senior, experienced people from India will be a good thing. However, I see that as no different from attracting any national to come to Sri Lanka to work. I ABSOLUTELY want that - that's why I helped form WorkInSriLanka and am still part of it. 

    High end people (of ANY origin) moving to Sri Lanka is critical for our future .. we need to become a net brain importer and not an exporter. However, they will come only if (a) you pay them properly and (b) if the quality of life is really good. These are things that WorkInSriLanka is addressing / informing about.

    Enterprise Internal IT Teams

    This literally the IT Crowd in the companies. (Haven't seen the awesomely funny British comedy? Check it out.) 

    Well actually often they do much much more than that crowd. The IT Crowd guys are only IT operations - they keep computers running, keep networks running etc.. That's absolutely critical. But now more and more companies are using information as a key business strategy. What that means is that internal IT is becoming more and more important. Companies cannot afford to buy prepackaged solutions nor simply outsource to others - they need to innovate inside the company to create real business value for themselves in a way that differentiates them from their competitors.

    Not easy stuff.

    You need really good people. Not 100s, but a good number of really really good people and a bigger number of good people. You also need a visionary to be the CIO/CTO to drive that effort. Not at all easy.

    Sri Lanka is still in transition to that. Some big companies are doing it really well, but there's a massive dearth of really innovative CIOs in Sri Lanka yet. We're developing them as they move up the ranks but IT was kept away from the business and that needs to change for this to work. 

    Is it a possibility to import talent for this from India? Of course! However, they are not cheap as those people have 1000x more work in India than here! What will happen to less skilled people who might come to this space? Good luck getting a job.

    For smaller companies, they don't have enterprise IT. Then they have the IT guy - the jack-of-all-trades who knows how to help with Powerpoint to debugging why he can't get to FB to cleaning up after he stupidly clicked on yet another get-rich-quick email. Those guys don't have (and don't need) CS degrees or IT/IS degrees. They need some training and lot of experience. They also get paid very little (think 25-50k/month). 

    Those guys could get crunched if we allow hundreds of such people to come from India. That would be just stupid.

    IT Enabled Services (ITES) and Business Process Outsourcers (BPO)

    This is where the numbers are. Order a pizza in Texas? An Indian will answer. Call Delta airlines with an issue? An Philippino will answer. Call HSBC about an issue. A Sri Lankan will answer.

    These started off as call centers but more and more they take an entire process (e.g. claim processing for medical claims) and run the entire process in a lower cost location. All you need is a good network connection and a lot of (young) people who will work for a little amount and work odd hours and be happy with it. Sri Lanka also claims to be the largest producer of UK qualified accountants after UK .. and so does a lot of financial process outsourcing too.

    There's also high end parts of this market - research outsourcing, analytics outsourcing etc.. Great. Do more. 

    Sri Lanka produces 300-400 THOUSAND 18 years each year. Only like 25,000 get to a university of some kind (who are the ones who have a chance at a higher value job). The rest need work. 

    This low end kind of ITES/BPO work is great .. it gets them a salary and if the country keeps devaluing the LKR they even get salary raises every year! Keeping people employed prevents them from wanting to join revolutions.

    Some BPOs claim that they couldn't scale enough in LK because they can't find the large number of passionate, English capable young people. Probably true. 

    MAYBE its possible to import them from India, but presumably only those that couldn't get jobs in the myriad of Indian BPOs. However, how that helps provide employment to the droves of young people who need work in Sri Lanka I do not know.

    Universities

    These guys of course produce the IT guys. We have state universities, private universities that grant their own degrees and a plethora of private ones that provide a learning environment to get a foreign university degree.

    As with anything the quality varies. The top govt engineering / science universities and the top private ones produce AWESOME graduates who are absolutely as good as the best in any country (India, US included). WSO2 is lucky that a bunch of these guys join us :-). 

    But my focus here is on the teachers. We need more PhDs to teach in our universities - ask Jaffna Univ CS dept for example. Will Indian PhDs (good ones) come and teach there? Great if they want to! Salary is pretty poor but its what it is. Even private universities will happily hire teachers. 

    We also need top research focused scientists to come here so we can improve our research capacity. I don't think opening employment to Indians will make a single IIT professor to come :(. Even right now, they can come (visa is easy) - so please, if you want to come and teach in Sri Lanka reach out thru WorkInSriLanka and we'll help you! And don't ever leave.

    India has absolutely fantastic universities. If they want to come and set up shop in LK and offer education to our people - great! India also has a LOT of crappy universities (see the article about unemployable graduates) - we certainly don't need them here.

    IT Training Institutes

    These are the literally hundreds (and maybe even thousands) of places that offer this course or that course on this or that. 90% of them in my opinion is crap. There's too little quality control. People are getting swindled daily by these jackassses who teach their children next to nothing and yet charge a ton of money. Even some local governments are in on it - I know in Dehiwala (my area) they run a program where literally 100s of people come for IT education. Each pays like Rs. 3000/month. Poor parents can't say no so they do it somehow.

    Do we need more of these? Yes, IF THEY ARE GOOD. We need to get our house in order, put regulations in to quality control these places and then of course its great if more teachers come and teach more. 

    India has absolutely fantastic training institutes. Would be great to get them to open shop here.

    India also UNDOUBTEDLY has at least 10x crappy places than we do. Most certainly we don't need them here - we already have enough people robbing money from poor parents who desperately want to educate their children in "IT".

    (p.s.: Blogger.com has the world's WORST editor. I'm bailing to medium.com soon.)




    k

    Platform-as-a-Service freedom or lock-in

    There has been a set of discussions about lock-in around Platform-as-a-Service (PaaS): Joe McKendrick and Lori MacVittie in particular bring out some of the real challenges here.

    Lori brings out the difference between portability and mobility. While I'm not in 100% agreement with Lori's definitions, there is a key point here: its not just code, its the services that the code relies on that buy lock-in into a cloud.

    So for example, if you use Amazon SQS, Force.com Chatter Collaboration, Google App Engine's bigtable data store, all of these tie you into the cloud you are deployed onto. Amazon isn't really a PaaS yet, so the tie-in is minimal, but Google App Engine (GAE) is based on Authentication, Logging, Data, Cache and other core services. Its almost impossible to imagine building an app without these, and they all tie you into GAE. Similarly, VMForce relies on a set of services from force.com.

    But its not just about mobility between force.com and Google: between two PaaSes. The typical enterprise needs a private cloud as much as public cloud. So there is a bigger question:

    Can you move your application from a private PaaS to a public Paas and back again?
    In other words, even if Google and Force got together and defined a mobility layer, can I then take an app I built and run it internally? Neither Google nor Force is offering a private PaaS.

    The second key question is this:
    How can I leverage standard Enterprise Architecture in a PaaS?
    What I'm getting at here is that as the world starts to implement PaaS, does this fit with existing models? Force.com and Google App Engine have effectively designed their own world view. VMForce and the recent Spring/Google App Engine announcement address one aspect of that - what Lori calls portability. By using Spring as an application model, there is at least a passing similarity to current programming models in Enterprises. But Enterprise Architectures are not just about Java code: what about an ESB? What about a Business Process engine (BPMS)? What about a standard XACML-based entitlement engine? So far PaaS has generally only addressed the most basic requirements of Enterprise core services: databases and a identity model.

    So my contention is this: you need a PaaS that supports the same core services that a modern Enterprise architecture has: ESB, BPMS, Authentication/Authorization, Portal, Data, Cache, etc. And you need a PaaS that works inside your organization as well as in a public Cloud. And if you really don't want any lock-in.... hadn't that PaaS better be Open Source as well? And yes, this is a hint of things coming very soon!




    k

    Taking College loyalty a bit far?

    A few weekends ago I was at the Balliol College family day and they had a face painter. I got her to do a large college arms on my face, which came out quite well! Thanks to Jeremy for the picture.




    k

    Wikileaks and Governance

    Whether or not you support the leaking of 250,000 embassy cables to the now infamous Wikileaks website, it certainly makes you think. Whatever business you are in there always emails or data that would be embarrassing or more likely harmful to our business if they were made widely available. So what is the lesson to be learnt from the Cablegate affair.

    The blame for the issue seems to be landing on a certain US private Bradley Manning. But I place the blame directly on a lack of Governance and poor IT systems. And the measures that have so far been announced - things like removing CD drives from classified systems - are simply the wrong approach. The real problem is why any one person - whatever level of clearance they had - should have access to all 250,000 cables.

    Without going into the details of XACML and policy-based entitlement models, suffice it to say that the right approach is to base access not only on the person, but the reason they have for accessing the data. Using policy-based entitlement, it is possible to have a well-defined Governance model where a person is given access to just the right data at just the right time for just the right purpose, and that this can be managed in a process-driven, auditable and controlled manner.

    If you live in a crime area and you leave your door open, you will be burgled. If you don't put in place good security and data governance, then it is you that will be blamed, not just the guy who steals your data.

    And if you want the technical low-down on XACML, start here, here and here.




    k

    Elastic Beanstalk - a PaaS fairytale

    A while back, I blogged about what it means to be Cloud Native. One of the key issues is multi-tenancy. As I discussed in that blog, there is a huge cost benefit in resources to multi-tenancy. This is how we can afford to run http://cloud.wso2.com and offer multi-tenant Tomcat currently for free beta use.

    Today Amazon announced Elastic Beanstalk. They call it a PaaS. Unfortunately Elastic Beanstalk is only multi-tenant at the VM layer - in other words it is fundamentally IaaS not PaaS. In other words you don't get the true benefit of PaaS: every Beanstalk user has to pay for at least one EC2 instance. Amazon tries to put this in a nice light:

    Each of your Elastic Beanstalk applications will be run on one or more EC2 instances that are provisioned just for your application. 
    WSO2 Stratos is designed to share the cost of the infrastructure fairly. In other words we will be charging for CPU, Bandwidth and Disk space, not for just having an app sitting waiting for requests.

    Effectively Beanstalk is a nice pre-packaged runtime with some good tooling. I have no doubt it is a major improvement over the existing model and from the look of it the tooling is pretty slick. But calling it a PaaS is simply a fairytale.




    k

    Introduction to WSO2 Message Broker


    Introduction to WSO2 Message Broker

    Introduction
    WSO2 Message Broker (MB) is a new Open Source project and product from WSO2 that provides messaging functionality within the WSO2 Carbon platform and to other clients in various languages. It works either standalone or in conjunction with products and components such as the WSO2 ESB and WSO2 Complex Event Processing Server.

    MB is based on the Apache Qpid/Java project (http://qpid.apache.org). From Apache Qpid, MB gets core support for the AMQP protocol and JMS API. On top of that WSO2 has added support for Amazon SQS APIs and WS-Eventing support.

    Understanding how the MB broker fits into Enterprise Architecture
    The Message Broker provides three main capabilities into an overall Enterprise Architecture:
    ·               A queueing/persistent message facility
    ·               An event distribution (pub/sub) model
    ·               An intermediary where multiple systems can connect irrespective of the direction of messages.

    To give some concrete examples of these benefits, here are some scenarios:
    1)   In the WSO2 ESB, a common pattern is to persist the message from an incoming HTTP request into a persistent message queue, and then process onbound from there. MB can provide the persistent queue.
    2)   The WSO2 ESB already has an event distribution model and eventing support, but the QPid-based broker provides higher performance as well as supporting the JMS API.
    3)   For example, you may wish to send messages from outside a firewall to a server inside. You could connect an ESB or Service Host within the firewall to a Message Broker running outside the firewall (for example on Amazon EC2). This model is used by the WSO2 Cloud Services Gateway.

    Where does AMQP fit?

    AMQP (www.amqp.org) is an open protocol for messaging. Whilst the AMQP protocol is still under development, it has released three stable releases (0-8, 0-9-1, and 0-10), with a 1.0 due during 2011. There are a number of implementations of the AMQP standard in production, including Apache Qpid (both Java and C++ versions), RabbitMQ, OpenAMQ and others.

    WSO2 has been a member of the AMQP working group for several years, and we strongly support AMQP as the way to introduce interoperability and greater openness into the messaging space.

    The Qpid broker supports a variety of clients on top of the AMQP protocol. The most useful of these for Carbon is the Java JMS 1.1 API, which provides a portable API as well as the main interface with the WSO2 ESB. In addition there are C# and other APIs. WSO2 MB also extends these with WS-Eventing and Amazon SQS APIs for interoperability using HTTP, REST and SOAP.

    Installing the WSO2 MB

    You can download the WSO2 MB Beta from:

    Once you have downloaded and unzipped, simply switch to the install directory

                cd wso2mb-1.0.0-SNAPSHOT
                binwso2server.bat  [ON WINDOWS]
                bin/wso2server.sh [ON LINUX/MACOSX]

    Let’s refer to the install directory as from now on.

    You should see the server startup:
    [2011-03-16 14:00:12,471]  INFO {org.wso2.carbon.server.Main} -  Initializing system...
    [2011-03-16 14:00:12,840]  INFO {org.wso2.carbon.server.TomcatCarbonWebappDeployer} -  Deployed Carbon webapp: StandardEngine[Tomcat].StandardHost[defaulthost].StandardContext[/]
    [2011-03-16 14:00:14,147]  INFO {org.wso2.carbon.atomikos.TransactionFactory} -  Starting Atomikos Transaction Manager 3.7.0
    [2011-03-16 14:00:19,952]  INFO {org.wso2.carbon.core.internal.CarbonCoreActivator} -  Starting WSO2 Carbon...
    [2011-03-16 14:00:19,983]  INFO {org.wso2.carbon.core.internal.CarbonCoreActivator} -  Operating System : Mac OS X 10.6.6, x86_64
    [2011-03-16 14:00:19,984]  INFO {org.wso2.carbon.core.internal.CarbonCoreActivator} -  Java Home        : /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    [2011-03-16 14:00:19,984]  INFO {org.wso2.carbon.core.internal.CarbonCoreActivator} -  Java Version     : 1.6.0_24
    [2011-03-16 14:00:19,985]  INFO {org.wso2.carbon.core.internal.CarbonCoreActivator} -  Java VM          : Java HotSpot(TM) 64-Bit Server VM 19.1-b02-334,Apple Inc.
    [2011-03-16 14:00:19,985]  INFO {org.wso2.carbon.core.internal.CarbonCoreActivator} -  Carbon Home      : /Users/paul/wso2/wso2mb-1.0.0-SNAPSHOT
    [2011-03-16 14:00:19,985]  INFO {org.wso2.carbon.core.internal.CarbonCoreActivator} -  Java Temp Dir    : /Users/paul/wso2/wso2mb-1.0.0-SNAPSHOT/tmp
    [2011-03-16 14:00:19,986]  INFO {org.wso2.carbon.core.internal.CarbonCoreActivator} -  User             : paul, en-US, Europe/London
    2011-03-16 14:00:12,471]  INFO {org.wso2.carbon.server.Main} -  Initializing system...

    some logs deleted

    [2011-03-16 14:00:41,691]  INFO {org.wso2.carbon.core.transports.http.HttpsTransportListener} -  HTTPS port       : 9443
    [2011-03-16 14:00:41,691]  INFO {org.wso2.carbon.core.transports.http.HttpTransportListener} -  HTTP port        : 9763
    [2011-03-16 14:00:42,422]  INFO {org.wso2.carbon.ui.internal.CarbonUIServiceComponent} -  Mgt Console URL  : https://192.168.1.100:9443/carbon/
    [2011-03-16 14:00:42,499]  INFO {org.wso2.carbon.core.internal.StartupFinalizerServiceComponent} -  Started Transport Listener Manager
    [2011-03-16 14:00:42,500]  INFO {org.wso2.carbon.core.internal.StartupFinalizerServiceComponent} -  Server           :  WSO2 MB -1.0.0-SNAPSHOT
    [2011-03-16 14:00:42,506]  INFO {org.wso2.carbon.core.internal.StartupFinalizerServiceComponent} -  WSO2 Carbon started in 27 sec
    2011-03-16 14:00:12,471]  INFO {org.wso2.carbon.server.Main} -  Initializing system...

    WSO2 Message Broker is installable in more ways for production systems. Typically it is either registered as a Linux Daemon or as a Windows Service – but for now we will stick with the command-line version for simplicity.

    Once the server is running you can access the management console. Point your browser at:
                https://localhost:9443

    Initially you will see a browser screen warning you about the certificates. Please tell your browser to continue (For a production server you would normally install a proper SSL/TLS certificate, but for initial install we generate a self-signed certificate that you need to agree to use).

    Once you have accepted the certificate, you should see a screen like:


    You can login using the default user/password which is admin/admin.

    Once you login you should see the following screen:


    Before we examine the admin console, lets first create a simple JMS client that will communicate with the server via AMQP on TCP/IP.

    Getting Started with JMS
    The Java Message Service (JMS) specification - http://www.oracle.com/technetwork/java/index-jsp-142945.html - is a specification for talking to message brokers. It is unfortunately poorly named: the word “service” implies this is an implementation, but JMS does not define an actual messaging service, instead just the API which is used to access JMS providers. “Java Messaging API” would more accurately express what JMS is. The result is that there are a variety of JMS providers, and they often have quite different approaches to their core model.

    The WSO2 Message Broker is based on the Apache Qpid project (http://qpid.apache.org) and is a compliant implementation of the JMS specification, as well as various levels of the AMQP specification (0-8, 0-9-1, 0-10). 

    To write completely standard portable JMS code, you need to use a JNDI provider to gain access to the JMS connection, queues, etc. In this example we will use a Qpid JNDI provider backed by a simple set of properties. This makes the overall system simple and highly portable.

    Here is a sample JMS application that can be used to test access to the Message Broker.  You can find this code here:



    First are some required imports.

    import javax.jms.*;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import java.util.Properties;

    Next is a simple “main” class definition:

    public class JMSExample {

    public static void main(String[] args) {
           JMSExample producer = new JMSExample();
           producer.runTest();
    }

          
    private void runTest() {

    Since this is just an example, we will place the complete logic in a try/catch block.

    try {

    Normally the JNDI is configured by a properties file, but you can also do it from an in-memory set of properties. To see a similar setup with a properties file, take a look at the ESB example below.  Here is a properties object to store the properties:

    Properties properties = new Properties();

    In order to bootstrap the JNDI entries for the connection factory and queue, we set name/value pairs into the simple properties object:                   

    properties.put("connectionfactory.cf",
           "amqp://admin:admin@carbon/carbon?brokerlist='tcp://localhost:5672'");

    The property name “connectionfactory.cf” denotes that we are creating an object of type ConnectionFactory with name “cf”. The value is a URL that is used to bootstrap the ConnectionFactory: this URL points to the AMQP broker. The syntax is broken up as follows:
           amqp://               Indicates this is an AMQP URL
           admin:admin@  This is the username/password
           carbon/carbon The client ID and virtual host
           ?                     separator for options
           brokerlist=’tcp://localhost:5672’          A list of broker URLs to use

    For more information on this URL syntax please see:

    The virtual host name is part of the definition in:
    /repository/conf/qpid/etc/virtualhosts.xml

    This file also defines aspects such as the maximum number of messages in a queue and the queue depth (maximum size in bytes of the queue).

    Now we need to create a JNDI entry for the queue we are going to talk to:

    properties.put("destination.samplequeue", "samplequeue; {create:always}");

    The property name “destination.samplequeue” indicates creating a destination with a JNDI name of “samplequeue”. The property value “samplequeue; {create:always}” indicates a queue named “samplequeue” with an attribute which tells the broker to create the queue if it doesn’t exist.

    These properties are specific to the particular JNDI implementation we are using, which is the Qpid “PropertiesFileInitialContextFactory”. So now we need to configure JNDI to use this implementation:
                         
                         
    properties.put("java.naming.factory.initial", "org.apache.qpid.jndi.PropertiesFileInitialContextFactory");

    Now we can do our JNDI lookups:

    Context context = new InitialContext(properties);

    ConnectionFactory connectionFactory =
    (ConnectionFactory) context.lookup("cf");

    Having “found” a JMS Connection Factory in the JNDI, we can now create a connection to the broker:

    Connection connection = connectionFactory.createConnection();
    connection.start();

    And now we can create a JMS Session:

    Session session = connection.createSession(false,
                                        Session.AUTO_ACKNOWLEDGE);

    One more lookup from JNDI will lookup our queue:

    Destination destination = (Destination) context
                                        .lookup("samplequeue");


    Now we can create a Producer, and send a message:
                         
    MessageProducer producer = session.createProducer(destination);
    TextMessage outMessage = session.createTextMessage();
    outMessage.setText("Hello World!");
    producer.send(outMessage);

    Of course, in real life you would most likely NOT now retrieve that same message from the same application, but for this example we will now retrieve the message:                      
    MessageConsumer consumer = session.createConsumer(destination);
    Message inMessage = consumer.receive();
    System.out.println(((TextMessage)inMessage).getText());

    And close up the connection and the initial context:
                         
    connection.close();
    context.close();
    } catch (Exception exp) {
           exp.printStackTrace();
    }

    To try out this client you need the correct client JARs.

    In the beta release you will find:
    /jms-client-lib/geronimo-jms_1.1_spec-1.1.0.wso2v1.jar
    /jms-client-lib/qpid-client-0.9.wso2v2.jar

    You also need to reference
    /lib/log4j-1.2.13.jar





    Once you have those in your classpath you can run the program. You should see some simple output:

    log4j:WARN No appenders could be found for logger (org.apache.qpid.jndi.PropertiesFileInitialContextFactory).
    log4j:WARN Please initialize the log4j system properly.
    Hello World!

    If you got that far, congratulations!

    In the next section we are going to look at using the ESB with the Message Broker.

    There are two approaches for this:
    1) If you are using the existing WSO2 ESB 3.0.1 or similar, you can deploy the MB client libraries and communicate using the network.

    2) As of the next WSO2 ESB release (3.1.0) it will include the Qpid/MB features as part of the release and you can utilize the Message Broker/JMS runtime locally in the same JVM.

    WSO2 MB and WSO2 ESB together
    In this first instance we are going to get the WSO2 ESB and MB to work together.
    Assuming that you already have the MB installed and running, you will first need to install the ESB and change the ports of the admin console so that they don’t clash. You can download WSO2 ESB 3.0.1 from:
                http://wso2.org/downloads/esb

    The install procedure is similar: unzip the ESB, but don’t start it up yet. Let’s name (for this guide) the directory where you installed the ESB as .

    First let’s edit the ports on which the ESB listens. (Alternatively you could do the same to the MB instead).

    Edit the epositoryconfmgt-transports.xml

    This file defines which ports the management console runs (HTTP and HTTPS).

    Please change:

    <transport name="http" class="org.wso2.carbon.server.transports.http.HttpTransport">
            <parameter name="port">9763</parameter>

    to read:
    <transport name="http" class="org.wso2.carbon.server.transports.http.HttpTransport">
            <parameter name="port">9764</parameter>

    Similarly change the HTTPS port to be 9444.

    Now the next step is to ensure that the ESB has the right drivers to talk to the MB. Copy the following JARs into the epositorycomponentslib directory:
    /jms-client-lib/geronimo-jms_1.1_spec-1.1.0.wso2v1.jar
    /jms-client-lib/qpid-client-0.9.wso2v2.jar


    We also need to configure the JMS transport correctly. To do this we edit the axis2.xml file:
      epositoryconfaxis2.xml

    This file has the JMS transport commented out. It also needs the settings updated to use the Qpid libraries. Change the file so that the JMS receiver and sender sections look like this:
      
           <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
            <parameter name="myTopicConnectionFactory" locked="false">
             <parameter name="java.naming.factory.initial" locked="false">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter>
             <parameter name="java.naming.provider.url" locked="false">resources/jndi.properties</parameter>
             <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
    <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
            </parameter>


            <parameter name="myQueueConnectionFactory" locked="false">
             <parameter name="java.naming.factory.initial" locked="false">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter>
             <parameter name="java.naming.provider.url" locked="false">resources/jndi.properties</parameter>
             <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
    <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
            </parameter>


            <parameter name="default" locked="false">
             <parameter name="java.naming.factory.initial" locked="false">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter>
             <parameter name="java.naming.provider.url" locked="false">resources/jndi.properties</parameter>
             <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
    <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
            </parameter>
        </transportReceiver>
    You can find my copy of the edited axis2.xml here:

    If you have looked through the JMS config you will notice it references a JNDI resource: resources/jndi.properties.

    This is used to do the same thing the hard-coded properties we used above do – configure the local JNDI that the JMS client inside the ESB will use. In a future release of the ESB we expect to automatically configure this JNDI, but in the meantime, we can simply create a file in the /resources directory.




    k

    WSO2 Workshops in Europe

    If any of you are interested in Identity, Security and Entitlement and how these fit into a SOA, Cloud and Enterprise Architectures, then I'd recommend you taking a look at our workshop that we are running in London, Paris, Zurich and Frankfurt.

    PS I think I'm meant to be the one on the left with St. George's flag!






    k

    Understanding ESB Performance & Benchmarking

    ESB performance is a hot (and disputed topic). In this post I don't want to talk about different vendors or different benchmarks. I'm simply trying to help people understand some of the general aspects of benchmarking ESBs and what to look out for in the results.

    The general ESB model is that you have some service consumer, an ESB in the middle and a service provider (target service) that the ESB is calling. To benchmark this, you usually have a load driver client, an ESB, and a dummy service.

    +-------------+      +---------+      +---------------+
    | Load Driver |------|   ESB   |------| Dummy Service |
    +-------------+      +---------+      +---------------+

    Firstly, we want the Load Driver (LD), the ESB and the Dummy Service (DS) to be on different hardware. Why? Because we want to understand the ESB performance, not the performance of the DS or LD.

    The second thing to be aware of is that the performance results are completely dependent on the hardware, memory, network, etc used. So never compare different results from different hardware.

    Now there are three things we could look at:
    A) Same LD, same DS, different vendors ESBs doing the same thing (e.g. content-based routing)
    B) Same LD, same DS, different ESB configs for the same ESB, doing different things (e.g. static routing vs content-based routing)
    C) Going via ESB compared to going Direct (e.g. LD--->DS without ESB)

    Each of these provides useful data but each also needs to be understood.

    Metrics
    Before looking at the scenarios, lets look at how to measure the performance. The two metrics that are always a starting point in any benchmark of an ESB here are the throughput (requests/second) and the latency (how long each request takes). With latency we can consider overall latency - the time taken for a completed request observed at the LD, and the ESB latency, which is the time taken by the message in the ESB. The ESB latency can be hard to work out. A well designed ESB will already be sending bytes to the DS before its finished reading the bytes the LD has sent it. This is called pipelining. Some ESBs attempt to measure the ESB latency inside the ESB using clever calculations. Alternatively scenario C (comparing via ESB vs Direct) can give an idea of ESB Latency. 

    But before we look at the metrics we need to understand the load driver.

    There are two different models to doing Load Driving:
    1) Do a realistic load test based on your requirements. For example if you know you want to support up to 50 concurrent clients each making a call every 5 seconds on average, you can simulate this.
    2) Saturation! Have a large number of clients, each making a call as soon as the last one finishes.

    The first one is aimed at testing what the ESB does before its fully CPU loaded. In other words, if you are looking to see the effect of adding an ESB, or the comparison of one ESB to another under realistic load, then #1 is the right approach. In this approach, looking at throughput may not be useful, because all the different approaches have similar results. If I'm only putting in 300 requests a sec on a modern system, I'm likely to see 300 request a sec. Nothing exciting. But the latency is revealing here. If one ESB responds in less time than another ESB thats a very good sign, because with the same DS the average time per request is very telling.

    On the other hand the saturation test is where the throughput is interesting. Before you look at the throughput though, check three things:
    1) Is the LD CPU running close to 100%?
    2) Is the DS CPU running close to 100%?
    3) Is the network bandwidth running close to 100%?

    If any of these are true, you aren't doing a good test of the ESB throughput. Because if you are looking at throughput then you want the ESB to be the bottleneck. If something else is the bottleneck then the ESB is not providing its max throughput and you aren't giving it a fair chance. For this reason, most benchmarks use a very very lightweight LD or a clustered LD, and similarly use a DS that is superfast and not a realistic DS. Sometimes the DS is coded to do some real work or sleep the thread while its executing to provide a more realistic load test. In this case you probably want to look at latency more than throughput.

    Finally you are looking to see a particular behaviour for throughput testing as you increase load.
    Throughput vs Load
    The shape of this graph shows an ideal scenario. As the LD puts more work through the ESB it responds linearly. At some point the CPU of the ESB hits maximum, and then the throughput stabilizes.  What we don't want to see is the line drooping at the far right. That would mean that the ESB is crumpling under the extra load, and its failing to manage the extra load effectively. This is like the office worker whose efficiency increases as you give them more work but eventually they start spending all their time re-organizing their todo lists and less work overall gets done.

    Under the saturation test you really want to see the CPU of the ESB close to 100% utilised. Why? This is a sign that its doing as much as possible. Why would it not be 100%? Two reasons: I/O, multi-processing and thread locks: either the network card or disk or other I/O is holding it up, the code is not efficiently using the available cores, or there are thread contention issues.

    Finally its worth noting that you expect the latency to increase a lot under the saturation test. A classic result is this: I do static routing for different size messages with 100 clients LD. For message sizes up to 100k maybe I see a constant 2ms overhead for using the ESB. Suddenly as the message size grows from 100k to 200k I see the overhead growing in proportion to the message size.


    Is this such a bad thing? No, in fact this is what you would expect. Before 100K message size, the ESB is underloaded. The straight line up to this point is a great sign that the ESB is pipelining properly. Once the CPU becomes loaded, each request is taking longer because its being made to wait its turn at the ESB while the ESB deals with the increased load.

    A big hint here: When you look at this graph, the most interesting latency numbers occur before the CPU is fully loaded. The latency after the CPU is fully loaded is not that interesting, because its simply a function of the number of queued requests.

    Now we understand the metrics, lets look at the actual scenarios.

    A. Different Vendors, Same Workload
    For the first comparison (different vendors) the first thing to be careful of is that the scenario is implemented in the best way possible in each ESB. There are usually a number of ways of implementing the same scenario. For example the same ESB may offer two different HTTP transports (or more!). For example blocking vs non-blocking, servlet vs library, etc. There may be an optimum approach and its worth reading the docs and talking to the vendor to understand the performance tradeoffs of each approach.

    Another thing to be careful of in this scenario is the tuning parameters. Each ESB has various tuning aspects that may affect the performance depending on the available hardware. For example, setting the number of threads and memory based on the number of cores and physical memory may make a big difference.

    Once you have your results, assuming everything we've already looked at is tickety-boo, then both latency and throughput are interesting and valid comparisons here. 

    B. Different Workloads, Same Vendor
    What this is measuring is what it costs you to do different activities with the same ESB. For example, doing a static routing is likely to be faster than a content-based routing, which in turn is faster than a transformation. The data from this tells you the cost of doing different functions with the ESB. For example you might want to do a security authentication/authorization check. You should see a constant bump in latency for the security check, irrespective of message size. But if you were doing complex transformation, you would expect to see higher latency for larger messages, because they take more time to transform. 

    C. Direct vs ESB
    This is an interesting one. Usually this is done for a simple static routing/passthrough scenario. In other words, we are testing the ESB doing its minimum possible. Why bother? Well there are two different reasons. Firstly ESB vendors usually do this for their own benefit as a baseline test. In other words, once you understand the passthrough performance you can then see the cost of doing more work (e.g. logging a header, validating security, transforming the message). 

    Remember the two testing methodologies (realistic load vs saturation)? You will see very very different results in each for this, and the data may seem surprising. For the realistic test, remember we want to look at latency. This is a good comparison for the ESB. How much extra time is spent going through the ESB per request under normal conditions. For example, if the average request to the backend takes 18ms and the average request via the ESB takes 19ms, we have an average ESB latency of 1ms. This is a good result - the client is not going to notice much difference - less than 5% extra. 

    The saturation test here is a good test to compare different ESBs. For example, suppose I can get 5000 reqs/sec direct. Via ESB_A the number is 3000 reqs/sec and via ESB_B the number is 2000 reqs/sec, I can say that ESB_A is providing better throughput than ESB_B. 

    What is not  a good metric here is comparing throughput in saturation mode for direct vs ESB. 


    Why not? The reason here is a little complex to explain. Remember how we coded DS to be as fast as possible so as not to be a bottleneck? So what is DS doing? Its really just reading bytes and sending bytes as fast as it can. Assuming the DS code is written efficiently using something really fast (e.g. just a servlet), what this is testing is how fast the hardware (CPU plus Network Card) can read and write through user space in the operating system. On a modern server hardware box you might get a very high number of transactions/sec. Maybe 5000req/s with each message in and out being 1k in size.

    So we have 1k in and 1k out = 2k IO.
    2k IO x 5000 reqs/sec x 8bits gives us the total network bandwidth of 80Mbits/sec (excluding ethernet headers and overhead).

    Now lets look at the ESB. Imagine it can handle 100% of the direct load. There is no slowdown in throughput for the ESB. For each request it has to read the message in from LD and send it out to DS. Even if its doing this in pipelining mode, there is still a CPU cost and an IO cost for this. So the ESB latency of the ESB maybe 1ms, but the CPU and IO cost is much higher. Now, for each response it also has to read it in from DS and write it out to LD. So if the DS is doing 80Mbits/second, the ESB must be doing 160Mbits/second. 

    Here is a picture.

    Now if the LD is good enough, it will have loaded the DS to the max. CPU or IO capacity or both will be maxed out. Suppose the ESB is running on the same hardware platform as the DS. If the DS machine can do 80Mbit/s flat out, there is no way that the same hardware running as an ESB can do 160Mbit/s! In fact, if the ESB and DS code are both as efficient as possible, then the throughput via ESB will always be 50% of the throughput direct to the DS. Now there is a possible way for the ESB to do better: it can be better coded than the DS. For example, if the ESB did transfers in kernel space instead of user space then it might make a difference. The real answer here is to look at the latency. What is the overhead of adding the ESB to each request. If the ESB latency is small, then we can solve this problem by clustering the ESB. In this case we would put two ESBs in and then get back to full throughput.

    The real point of this discussion is that this is not a useful comparison. In reality backend target services are usually pretty slow. If the same dual core server is actually doing some real work - e.g. database lookups, calculations, business logic - then its much more likely to be doing 500 requests a second or even less. 

    The following chart shows real data to demonstrate this. The X-Axis shows increasing complexity of work at the backend (DS). As the effort taken by the backend becomes more realistic, the loss in throughput of having an ESB in the way reduces. So with a blindingly fast backend, we see the ESB struggling to provide just 55% of the throughput of the direct case. But as the backend becomes more realistic, we see much better numbers. So at 2000 requests a second there is barely a difference (around 10% reduction in throughput). 


    In real life, what we actually see is that often you have many fewer ESBs than backend servers. For example, if we took the scenario of a backend server that can handle 500 reqs/sec, then we might end up with a cluster of two ESBs handling a cluster of 8 backends. 

    Conclusion
    I hope this blog has given a good overview of ESB performance and benchmarking. In particular, when is a good idea to look at latency and when to use throughput. 





    k

    CommsHack

    Yesterday the University of Portsmouth Computing Society held a "Comms Hack" - basically a hackathon sponsored by Twilio.

    Unfortunately the Twilio guy had a problem and couldn't physically attend, but it all worked out. I could only be there for about an hour at the beginning and then another hour and half later. It took me a while to think of an idea, and eventually I started coding in python to build a simple text weather service. The idea is to text in your city (e.g. "GB Portsmouth") and then you get the latest weather. When the weather changes you also get updates.

    I really wanted to use MQTT because I love it :-)

    I ended building a system of about 5 concurrent processes all talking via topics:

    • One process polls openweather for weather data, and then reformats it slightly (e.g. changing Kelvin to Celsius!), and posts to a topic /weather/{country}/{city}
    • Another process listens for webhooks from Twilio and then resends as MQTT messages to /sms/
    • There is a process that listens for messages on /phone/{number} and texts those via Twilio to the phone number
    • The final process listens for subscription messages, and also keeps track of the latest weather data. When a new subscriber comes in or the weather for a city changes, it republishes it to the /phone topic.
    It actually works pretty well - the only things that might be good additions are that:
    a) I only get the weather from a fixed set of cities. This could be enhanced by automatically adding new cities to the subscribe list
    b) You get the weather as a JSON string via text :-) 

    What I liked best about this model is the loosely coupled nature of the coding. I could add and test each part independently. Similarly it would be easy to add a different type of subscription by creating a new process. Another cool aspect is how easy it is to monitor and debug just by subscribing to the various topics in MQTT. Testing is nice and easy too because you can write mosquitto_pub command-line tests.

    I'll leave it running for a couple of days (or until my Twilio balance runs dry!). If you want to try it, text one of "GB Oxford", "GB Portsmouth", "GB Southampton" or "GB London" to 01143031705. I have to warn you - I haven't yet implemented an unsubscribe!

    The code is (in usual hackday style messiness) here




    k

    Internet of Things - protocols and access keys

    I've just read this article from Mark O'Neill on the 10 concerns for the Internet of Things. Mark brings up some very interesting aspects and concerns. I'd like to comment on two of those: protocols and access keys.

    His primary concern is protocol proliferation. I agree this is an issue. Mark explicitly mentions CoAP, MQTT, AMQP and XMPP. Interestingly he doesn't mention HTTP, which I have found to be heavily used by devices, especially the new generation of Raspberry Pi based systems. Many Arduino's also use HTTP.

    I will admit to a strong bias. I think that MQTT is the best of these protocols for IoT devices, with CoAP a distant second.

    Let's get XMPP out of the way. I love XMPP. I think its a fantastic protocol. Do I want to create XML packets on my Arduino? Er... nope. Even on 32-bit controllers, there is still the network traffic to consider: suppose I'm using a GPRS connection and I have thousands of devices deployed: minimizing network traffic is important for cost and efficiency, and XMPP was not designed for that.

    AMQP is not an appropriate protocol for IoT devices and was not designed for that. It is designed for "the efficient exchange of information within and between enterprises". It was certainly not designed for lightweight, non-persistent, non-transactional systems. To that end, my own system (WSO2) will be providing efficient bridging for AMQP and MQTT to enable lightweight systems to get their data into wider enterprise contexts. I also demonstrated HTTP to MQTT bridging with the WSO2 ESB at the MQTT Interop held last week at EclipseCon.

    How about CoAP vs MQTT. Firstly, CoAP is more appropriate to compare to MQTT-SN. It is UDP only, and designed to emulate a RESTful model over UDP. My biggest concern with CoAP is this: most people don't actually understand REST - they understand HTTP. If I had a dollar for every time I've come across supposedly RESTful interfaces that are really HTTP interfaces, I'd be a rich man! 

    Interestingly, despite MQTT having been around for 10 years, the Google Trend shows that it has only recently hit the public notice:
    However, as you can see, it has quickly overtaken CoAP. In terms of traffic, it is a clear winner: every Facebook mobile app uses MQTT to communicate with the Facebook servers.

    The other area I'd like to comment on is access keys. I agree this is a big issue, and that is the reason I've been working on using OAuth2 access keys with MQTT and IoT devices. I recently gave talks about this at FOSDEM, QCon London, and EclipseCon.  The EclipseCon talk also covered a set of wider security concerns and the slides are available here. OAuth2 and OpenID Connect are important standards that have got incredible traction in a short period of time. They have evolved out of 10+ years of trying to solve the distributed, federated identity and access control problems of the Internet. 

    In my presentation I strongly argued that passwords are bad for users, but worse for devices. Tokens are the correct model, and the OAuth2 token is the best available token to use at this point. There was considerable interest in the MQTT interop session on standardizing the use of OAuth2 tokens with the protocol. 

    My personal prediction is that we will see MQTT and HTTP become the most-used IoT protocols, and I strongly urge (and hope) that OAuth2 tokens will become the de-facto model across both of these.







    k

    Berkeley, UCLA, Harvard, MIT, Princeton, Stanford y Yale en Academic Earth

    Si utilizás el buscador Google Chrome podés encontrar herramientas de mucho provecho. Acabo de toparme con la extensión en línea de Academic Earth, que ofrece el acceso gratuito a videos de los cursos y conferencias de las universidades más destacadas de Estados Unidos y en las materias más diversas. ENJOY KNOWLEDGE!

     
    Podrás presenciar conferencias como, por ejemplo,
    Language in the Brain, Mouth and the Hands
    By Paul Bloom - Yale



    Watch it on Academic Earth





    k

    How to Make More $$ without Really Trying


    Have you noticed how different businesses are constantly inventing new ways to nickel and dime their customers? Airlines have first stopped offering free in-flight meals; then introduced a fee for checked-in luggage; they reduced the leg space of their seats and are now charging for "special" (exit row and bulkhead) seats that leave you less cramped at the end of a two-hour flight. At the same time, they tacked a host of fees to their ticket prices, so that now the amount of these fees (and government taxes) exceeds the nominal price of the ticket itself.

    Other businesses are not bashful either in inventing sneaky ways to separate you from your money. A carton of orange juice, which used to contain half a gallon (64 oz) of juice now contains only 59 oz. A can of coffee, which at one time contained a pound (16 oz) now contains 12, 11, or 10.5 oz. And don't expect the price to go down for these shrinking quantities of products.
    Gas stations are now adding a separate fee, in addition to their already sky-high prices, for credit card payments.

    Some physicians are charging thousands of dollars in yearly fees just to keep you as a patient (no specific service included). The list may go on and on. Many of these and other businesses count on their customers being stupid or at least not paying attention to what they are being charged for and how much they are getting. Of course, they're also trying to compensate for their own rising costs (in part due to similar tactics by other businesses) and shrinking revenues due to the recession.
    So, why don't we, translators, get imaginative and enhance our incomes by adding a few items to our rates? I envision my future bill to my clients to look something like this:
    Translation
    50.00
    Availability fee
    2.50
    Keyboarding fee
    3.00
    Administrative fee
    2.00
    Billing fee
    1.50
    Software usage fee
    1.75
    Hardware usage fee
    1.80
    e-mailing fee
    1.65
    Alertness fee*
    1.60
    Innovation fee **
    2.50
    Bundling fee***
      2.00
    Total payable
    70.30

    * That's for the espresso to keep me awake while I'm translating.
    ** That's for inventing all these possible and impossible fees.
    *** Let them figure out what this means (you can use any random word from the dictionary here).

    Feel free to add your own bright ideas to this list.

    Thanks to witty Gabe Bokor from Translation Journal Blog.




    k

    Training for legal translators. Part IV. Make at least one big study commitment.

    This is the last part of a series on training for legal translators. See the first post here. To put yourself on the path to becoming a good legal translator, you need to make one big study commitment. A big study commitment is anything that takes at least a year, challenges you, and costs a lot of […]




    k

    Five things your translator should know when translating legislation into English

    Translating the legislation or regulations of a country, company or university into English requires certain skills and know-how. This post lists five things your translator should know when translating legislation into English. 1. How to apply English drafting conventions Conventions on headings, numbering, referencing and capitalisation differ from one legal language to another. For instance, […]




    k

    Spain’s main registros: translations and background info

    This post looks at the main public registers (registros) in Spain. It outlines what they are for and lists common translations and similar entities in English-speaking countries. Whether each registro is more a list or a place (or both) is also covered. This key distinction (described in this post) can affect the translation or at […]




    k

    Guillaume Kasbarian félicite Elon Musk tout juste nommé ministre par Trump, la gauche s’insurge

    Apres la nomination d'Elon Musk a la tete d'un ministere de l'Efficacite gouvernementale, le ministre de la Fonction publique francais a exprime sa << hate >> de << partager les meilleures pratiques >>.




    k

    Text Line Detection and Segmentation: Uneven Skew Angles and Hill-and-Dale Writing

    In this paper a line detection and segmentation technique is presented. The proposed technique is an improved version of an older one. The experiments have been performed on the training dataset of the ICDAR 2009 handwriting segmentation contest in order to be able to compare, objectively, the performance of the two techniques. The improvement between the older and newer version is more than 24% while the average extra CPU time cost is less than 200 ms per page.




    k

    Fusion of Complementary Online and Offline Strategies for Recognition of Handwritten Kannada Characters

    This work describes an online handwritten character recognition system working in combination with an offline recognition system. The online input data is also converted into an offline image, and in parallel recognized by both online and offline strategies. Features are proposed for offline recognition and a disambiguation step is employed in the offline system for the samples for which the confidence level of the classier is low. The outputs are then combined probabilistically resulting in a classier out-performing both individual systems. Experiments are performed for Kannada, a South Indian Language, over a database of 295 classes. The accuracy of the online recognizer improves by 11% when the combination with offline system is used.




    k

    Color Image Restoration Using Neural Network Model

    Neural network learning approach for color image restoration has been discussed in this paper and one of the possible solutions for restoring images has been presented. Here neural network weights are considered as regularization parameter values instead of explicitly specifying them. The weights are modified during the training through the supply of training set data. The desired response of the network is in the form of estimated value of the current pixel. This estimated value is used to modify the network weights such that the restored value produced by the network for a pixel is as close as to this desired response. One of the advantages of the proposed approach is that, once the neural network is trained, images can be restored without having prior information about the model of noise/blurring with which the image is corrupted.




    k

    Choice of Classifiers in Hierarchical Recognition of Online Handwritten Kannada and Tamil Aksharas

    In this paper, we propose a novel dexterous technique for fast and accurate recognition of online handwritten Kannada and Tamil characters. Based on the primary classifier output and prior knowledge, the best classifier is chosen from set of three classifiers for second stage classification. Prior knowledge is obtained through analysis of the confusion matrix of primary classifier which helped in identifying the multiple sets of confused characters. Further, studies were carried out to check the performance of secondary classifiers in disambiguating among the confusion sets. Using this technique we have achieved an average accuracy of 92.6% for Kannada characters on the MILE lab dataset and 90.2% for Tamil characters on the HP Labs dataset.




    k

    An Empirical Study on Human and Information Technology Aspects in Collaborative Enterprise Networks

    Small and Medium Enterprises (SMEs) face new challenges in the global market as customers require more complete and flexible solutions and continue to drastically reduce the number of suppliers. SMEs are trying to address these challenges through cooperation within collaborative enterprise networks (CENs). Human aspects constitute a fundamental issue in these networks as people, as opposed to organizations or Information Technology (IT) systems, cooperate. Since there is a lack of empirical studies on the role of human factors in IT-supported collaborative enterprise networks, this paper addresses the major human aspects encountered in this type of organization. These human aspects include trust issues, knowledge and know-how sharing, coordination and planning activities, and communication and mutual understanding, as well as their influence on the business processes of CENs supported by IT tools. This paper empirically proves that these aspects constitute key factors for the success or the failure of CENs. Two case studies performed on two different CENs in Switzerland are presented and the roles of human factors are identified with respect to the IT support systems. Results show that specific human factors, namely trust and communication and mutual understanding have to be well addressed in order to design and develop adequate software solutions for CENs.




    k

    Pragmatic Knowledge Services

    Knowledge, innovations and their implementation in effective practices are essential for development in all fields of societal action, e.g. policy, business, health, education, and everyday life. However, managing the interrelations between knowledge, innovation and practice is complicated. Facilitation by suitable knowledge services is needed. This paper explores the theory of converging knowledge, innovation, and practice, discusses some advances in information systems development, and identifies general requirements for pragmatic knowledge services. A trialogical approach to knowledge creation and learning is adopted as a viable theoretical basis. Also three examples of novel knowledge services Opasnet, Innovillage, and Knowledge Practices Environment (KPE), are presented. Eventually, it is concluded that pragmatic knowledge services, as hybrid systems of information technology and its users, are not only means for creation of practical knowledge, but vehicles of a cultural change from individualistic perceptions of knowledge work towards mediated collaboration.




    k

    IDEA: A Framework for a Knowledge-based Enterprise 2.0

    This paper looks at the convergence of knowledge management and Enterprise 2.0 and describes the possibilities for an over-arching exchange and transfer of knowledge in Enterprise 2.0. This will be underlined by the presentation of the concrete example of T-System Multimedia Solutions (MMS), which describes the establishment of a new enterprise division "IG eHealth". This is typified by the decentralised development of common ideas, collaboration and the assistance available to performing responsibilities as provided by Enterprise 2.0 tools. Taking this archetypal example and the derived abstraction of the problem regarding the collaboration of knowledge workers as the basis, a regulatory framework will be developed for knowledge management to serve as a template for the systemisation and definition of specific Enterprise 2.0 activities. The paper will conclude by stating factors of success and supporting Enterprise 2.0 activities, which will facilitate the establishment of a practical knowledge management system for the optimisation of knowledge transfer.




    k

    Enterprise Microblogging for Advanced Knowledge Sharing: The References@BT Case Study

    Siemens is well known for ambitious efforts in knowledge management, providing a series of innovative tools and applications within the intranet. References@BT is such a web-based application with currently more than 7,300 registered users from more than 70 countries. Its goal is to support the sharing of knowledge, experiences and best-practices globally within the Building Technologies division. Launched in 2005, References@BT features structured knowledge references, discussion forums, and a basic social networking service. In response to use demand, a new microblogging service, tightly integrated into References@BT, was implemented in March 2009. More than 500 authors have created around 2,600 microblog postings since then. Following a brief introduction into the community platform References@BT, we comprehensively describe the motivation, experiences and advantages for an organization in providing internal microblogging services. We provide detailed microblog usage statistics, analyzing the top ten users regarding postings and followers as well as the top ten topics. In doing so, we aim to shed light on microblogging usage and adoption within a globally distributed organization.




    k

    On the Construction of Efficiently Navigable Tag Clouds Using Knowledge from Structured Web Content

    In this paper we present an approach to improving navigability of a hierarchically structured Web content. The approach is based on an integration of a tagging module and adoption of tag clouds as a navigational aid for such content. The main idea of this approach is to apply tagging for the purpose of a better highlighting of cross-references between information items across the hierarchy. Although in principle tag clouds have the potential to support efficient navigation in tagging systems, recent research identified a number of limitations. In particular, applying tag clouds within pragmatic limits of a typical user interface leads to poor navigational performance as tag clouds are vulnerable to a so-called pagination effect. In this paper, a solution to the pagination problem is discussed, implemented as a part of an Austrian online encyclopedia called Austria-Forum, and analyzed. In addition, a simulation-based evaluation of the new algorithm has been conducted. The first evaluation results are quite promising, as the efficient navigational properties are restored.




    k

    A Clustering Approach for Collaborative Filtering Recommendation Using Social Network Analysis

    Collaborative Filtering(CF) is a well-known technique in recommender systems. CF exploits relationships between users and recommends items to the active user according to the ratings of his/her neighbors. CF suffers from the data sparsity problem, where users only rate a small set of items. That makes the computation of similarity between users imprecise and consequently reduces the accuracy of CF algorithms. In this article, we propose a clustering approach based on the social information of users to derive the recommendations. We study the application of this approach in two application scenarios: academic venue recommendation based on collaboration information and trust-based recommendation. Using the data from DBLP digital library and Epinion, the evaluation shows that our clustering technique based CF performs better than traditional CF algorithms.




    k

    Markup upon Video - towards Dynamic and Interactive Video Annotations

    Interactive video is increasingly becoming a more and more dominant feature of our media platforms. Especially due to the popular YouTube annotations framework, integrating graphical annotations in a video has become very fashionable these days. However, the current options are limited to a few graphical shapes for which the user can define as good as no dynamic behaviour. Despite the enormous demand for easy-creatable, interactive video there are no such advanced tools available.

    In this article we describe an innovative approach, to realize dynamics and interactivity of video annotations. First we explain basic concepts of video-markup like the generic element model and visual descriptors. After that we introduce the event-tree model, which can be used to define event-handling in an interactive video formally as well as visually. By combining these basic concepts, we can give an effective tool to the video community for realizing interactive and dynamic video in a simple, intuitive and focused way.




    k

    Automatically Checking Feature Model Refactorings

    A feature model (FM) defines the valid combinations of features, whose combinations correspond to a program in a Software Product Line (SPL). FMs may evolve, for instance, during refactoring activities. Developers may use a catalog of refactorings as support. However, the catalog is incomplete in principle. Additionally, it is non-trivial to propose correct refactorings. To our knowledge, no previous analysis technique for FMs is used for checking properties of general FM refactorings (a transformation that can be applied to a number of FMs) containing a representative number of features. We propose an efficient encoding of FMs in the Alloy formal specification language. Based on this encoding, we show how the Alloy Analyzer tool, which performs analysis on Alloy models, can be used to automatically check whether encoded general and specific FM refactorings are correct. Our approach can analyze general transformations automatically to a significant scale in a few seconds. In order to evaluate the analysis performance of our encoding, we evaluated in automatically generated FMs ranging from 500 to 2,000 features. Furthermore, we analyze the soundness of general transformations.




    k

    An Aspect-Oriented Framework for Weaving Domain-Specific Concerns into Component-Based Systems

    Software components are used in various application domains, and many component models and frameworks have been proposed to fulfill domain-specific requirements. The general trend followed by these approaches is to provide ad-hoc models and tools for capturing these requirements and for implementing their support within dedicated runtime platforms, limited to features of the targeted domain. The challenge is then to propose more flexible solutions, where components reuse is domain agnostic. In this article, we present a framework supporting compositional construction and development of applications that must meet various extra-functional/domain-specific requirements. The key points of our contribution are: i) We target development of component-oriented applications where extra-functional requirements are expressed as annotations on the units of composition in the application architecture. ii) These annotations are implemented as open and extensible component-based containers, achieving full separation of functional and extra-functional concerns. iii) Finally, the full machinery is implemented using the Aspect-Oriented Programming paradigm. We validate our approach with two case studies: the first is related to real-time and embedded applications, while the




    k

    A Framework to Evaluate Interface Suitability for a Given Scenario of Textual Information Retrieval

    Visualization of search results is an essential step in the textual Information Retrieval (IR) process. Indeed, Information Retrieval Interfaces (IRIs) are used as a link between users and IR systems, a simple example being the ranked list proposed by common search engines. Due to the importance that takes visualization of search results, many interfaces have been proposed in the last decade (which can be textual, 2D or 3D IRIs). Two kinds of evaluation methods have been developed: (1) various evaluation methods of these interfaces were proposed aiming at validating ergonomic and cognitive aspects; (2) various evaluation methods were applied on information retrieval systems (IRS) aiming at measuring their effectiveness. However, as far as we know, these two kinds of evaluation methods are disjoint. Indeed, considering a given IRI associated to a given IRS, what happens if we associate this IRI to another IRS not having the same effectiveness. In this context, we propose an IRI evaluation framework aimed at evaluating the suitability of any IRI to different IR scenarios. First of all, we define the notion of IR scenario as a combination of features related to users, IR tasks and IR systems. We have implemented the framework through a specific evaluation platform that enables performing IRI evaluations and that helps end-users (e.g. IRS developers or IRI designers) in choosing the most suitable IRI for a specific IR scenario.




    k

    Improving Security Levels of IEEE802.16e Authentication by Involving Diffie-Hellman PKDS

    Recently, IEEE 802.16 Worldwide Interoperability for Microwave Access (WiMAX for short) has provided us with low-cost, high efficiency and high bandwidth network services. However, as with the WiFi, the radio wave transmission also makes the WiMAX face the wireless transmission security problem. To solve this problem, the IEEE802.16Std during its development stage defines the Privacy Key Management (PKM for short) authentication process which offers a one-way authentication. However, using a one-way authentication, an SS may connect to a fake BS. Mutual authentication, like that developed for PKMv2, can avoid this problem. Therefore, in this paper, we propose an authentication key management approach, called Diffie-Hellman-PKDS-based authentication method (DiHam for short), which employs a secret door asymmetric one-way function, Public Key Distribution System (PKDS for short), to improve current security level of facility authentication between WiMAX's BS and SS. We further integrate the PKMv1 and the DiHam into a system, called PKM-DiHam (P-DiHam for short), in which the PKMv1 acts as the authentication process, and the DiHam is responsible for key management and delivery. By transmitting securely protected and well-defined parameters for SS and BS, the two stations can mutually authenticate each other. Messages including those conveying user data and authentication parameters can be then more securely delivered.




    k

    Least Slack Time Rate first: an Efficient Scheduling Algorithm for Pervasive Computing Environment

    Real-time systems like pervasive computing have to complete executing a task within the predetermined time while ensuring that the execution results are logically correct. Such systems require intelligent scheduling methods that can adequately promptly distribute the given tasks to a processor(s). In this paper, we propose LSTR (Least Slack Time Rate first), a new and simple scheduling algorithm, for a multi-processor environment, and demonstrate its efficient performance through various tests.




    k

    Knowledge Extraction from RDF Data with Activation Patterns

    RDF data can be analyzed with various query languages such as SPARQL. However, due to their nature these query languages do not support fuzzy queries that would allow us to extract a broad range of additional information. In this article we present a new method that transforms the information presented by subject-relationobject relations within RDF data into Activation Patterns. These patterns represent a common model that is the basis for a number of sophisticated analysis methods such as semantic relation analysis, semantic search queries, unsupervised clustering, supervised learning or anomaly detection. In this article, we explain the Activation Patterns concept and apply it to an RDF representation of the well known CIA World Factbook.




    k

    A Semantic Wiki Based on Spatial Hypertext

    Spatial Hypertext Wiki (ShyWiki) is a wiki which represents knowledge using notes that are spatially distributed in wiki pages and have visual characteristics such as colour, size, or font type. The use of spatial and visual characteristics in wikis is important to improve human comprehension, creation and organization of knowledge. Another important capability in wikis is to allow machines to process knowledge. Wikis that formally structure knowledge for this purpose are called semantic wikis. This paper describes how ShyWiki can make use of spatial hypertext in order to be a semantic wiki. ShyWiki can represent knowledge at different levels of formality. Users of ShyWiki can annotate the content and represent semantic relations without being experts of semantic web data description languages. The spatial hypertext features make it suitable for users to represent unstructured knowledge and implicit graphic relations among concepts. In addition, semantic web and spatial hypertext features are combined to represent structured knowledge. The semantic web features of ShyWiki improve navigation and publish the wiki knowledge as RDF resources, including the implicit relations that are analyzed using a spatial parser.




    k

    A Ranking Tool Exploiting Semantic Descriptions for the Comparison of EQF-based Qualifications

    Nowadays, one of the main issues discussed at the Community level is represented by the mobility of students and workers across Europe. During the last years, in order to deal with the above picture, several initiatives have been carried out: one of them is the definition of the European Qualification Framework (EQF), a common architecture for the description of qualifications. At the same time, several research activities were established with the aim of finding how semantic technologies could be exploited for qualifications comparison in the field of human resources acquisition. In this paper, the EQF specifications are taken into account and they are applied in a practical scenario to develop a ranking algorithm for the comparison of qualifications expressed in terms of knowledge, skill and competence concepts, potentially aimed at supporting European employers during the recruiting phase.




    k

    A Comparison of Different Retrieval Strategies Working on Medical Free Texts

    Patient information in health care systems mostly consists of textual data, and free text in particular makes up a significant amount of it. Information retrieval systems that concentrate on these text types have to deal with the different challenges these medical free texts pose to achieve an acceptable performance. This paper describes the evaluation of four different types of information retrieval strategies: keyword search, search performed by a medical domain expert, a semantic based information retrieval tool, and a purely statistical information retrieval method. The different methods are evaluated and compared with respect to its appliance in medical health care systems.




    k

    Black Friday, bloody Friday

    On est enfin à ce jour qui magnifie la contradiction de nos sociétés. A lors qu’on nous met en garde tous les jours contre l’obsolescence programmée de notre unique planète, notre société de sur-consommation nous intime l’ordre de consommer jusqu’à plus...




    k

    Des dizaines de morts dans le sud-ouest du Pakistan après un attentat suicide

    Des dizaines de morts dans le sud-ouest du Pakistan après un attentat suicide




    k

    La Russie lance un "nombre record" de drones sur l'Ukraine. Barrage de drones ukrainiens sur Moscou

    La Russie lance un "nombre record" de drones sur l'Ukraine. Barrage de drones ukrainiens sur Moscou




    k

    Trump et Poutine auraient discuté de la guerre en Ukraine, "une pure fiction", selon le Kremlin

    Trump et Poutine auraient discuté de la guerre en Ukraine, "une pure fiction", selon le Kremlin




    k

    No Comment : des slackliners se balancent entre des montgolfières à 2 500 mètres d'altitude

    No Comment : des slackliners se balancent entre des montgolfières à 2 500 mètres d'altitude




    k

    No Comment : un psychanaliste dans le métro new-yorkais

    No Comment : un psychanaliste dans le métro new-yorkais




    k

    Donald Trump confie à Elon Musk et Vivek Ramaswamy "l'efficacité gouvernementale"

    Donald Trump confie à Elon Musk et Vivek Ramaswamy "l'efficacité gouvernementale"




    k

    No Comment : en Serbie, des centaines d’œufs jetés sur le siège d’Euro Lithium Balkan

    No Comment : en Serbie, des centaines d’œufs jetés sur le siège d’Euro Lithium Balkan




    k

    Les enfants ukrainiens enlevés par la Russie destinés à servir son armée ?

    Les enfants ukrainiens enlevés par la Russie destinés à servir son armée ?




    k

    An efficient edge swap mechanism for enhancement of robustness in scale-free networks in healthcare systems

    This paper presents a sequential edge swap (SQES) mechanism to design a robust network for a healthcare system utilising energy and communication range of nodes. Two operations: sequential degree difference operation (SQDDO) and sequential angle sum operation (SQASO) are performed to enhance the robustness of network. With equivalent degrees of nodes from the network's centre to its periphery, these operations build a robust network structure. Disaster attacks that have a substantial impact on the network are carried out using the network information. To identify a link between the malicious and disaster attacks, the Pearson coefficient is employed. SQES creates a robust network structure as a single objective optimisation solution by changing the connections of nodes based on the positive correlation of these attacks. SQES beats the current methods, according to simulation results. When compared to hill-climbing algorithm, simulated annealing, and ROSE, respectively, the robustness of SQES is improved by roughly 26%, 19% and 12%.