Friday, November 07, 2014

News from the East / Notícias do Oriente

Surprising news from China (original version here)


English version
It's time to remember the disclaimer that's always on the right side of the blog. This blog is related to my work, and I never hide who my employer is (nor do I forget it), but the views presented are my own. I just emphasize this because on this post I'll possibly present some extra aspects that may suggest an opinion or options, which is not my intention. I just want to provide as much context as possible.

Enough with the caution.... If you've been checking your social network accounts you may have heard about some arrangement that IBM established relative to Informix in the Chinese market. Members of the IIUG board of directors, like Art Kagel and Eric Vercelletto have been publishing articles, news, tweets, Facebook posts etc. A couple of days ago, it was published in IIUG insider (periodic newsletter). For convenience I add it to the bottom of this article.
Informix code is made available to a Chinese partner, so that it can be used for locally innovated products, adapted to local market needs. The resulting product can be licensed on the Chinese market only. It's a short press release, but with a lot of content... It took me a while to understand what this means and I accept I may haven't seen this from all possible angles. To start with, this looks like something new, and I honestly never heard bout a similar move from any software supplier.
I believe we need a bit more context to fully understand the reasoning behind all this. As a starting point, I must say that China is an unknown place for me. We don't ear too much about the country and many times we do, it's not for the best reasons. But anybody will agree on a few points:

  1. China importance in geographic, political and economic aspects can't be ignored. It's a huge country, a huge market and it's probably the only region in the world that has seen sustainable growth in the latest years.
  2. The relations between China and the western world have seen some tension. There are reports of organized cyber security attacks, industrial espionage etc.
  3. US government has ban a couple of Chinese companies from government contracts
  4. China has put up barriers to western technology adoption
  5. China is said to be trying to reduce the usage of "IOE" (IBM, Oracle and EMC)
  6. Chinese government tries to create some independence from foreign IT companies and foster local business and markets (the national technology agenda mentioned in the press release)
  7. China needs technology in order to grow. It's market needs technology to innovate and prosper. The Chinese market growth is a huge opportunity for global companies
 As you can imagine, and again, I can only imagine as I don't have any special insight or knowledge, some of these points seem contradictory: How can you grow business relations when there are politics involved? How can China increase the use of technology without becoming too dependent of foreign companies? How can global companies participate in this huge country modernization while complying with China national goals? These questions are not easy to answer and I'm glad I'm just a technical guy... I just stick to bits and bytes and I don't have to be concerned with these matters. But someone does and I suppose these sort of arrangements will become more frequent as they are possible ways to solve part of these dilemmas. Actually this is not totally new... IBM sold the xServer line (x86 based line) to Lenovo, a Chinese company. It has also licensed the Power technology to Chinese companies (in reality to anyone who wants to produce Power compatible chips). It also partners with local companies or the government to offer products adapted to the specific needs of the Chinese market. This is truly a bold step. And naturally there are very interesting points in it. To name a few:
  1. With strong directives from the government to increase the use of locally innovated products, Informix becomes a privilege player in the Chinese market. In fact we can find sites referencing it's presence in many large banks, telecommunication companies and government departments. That's obviously a good thing.
  2. China can use open source projects like MySQL and PostgresSQL and fork them to build their own products. In fact, the same entity involved with IBM on this agreement already did so. So, an obvious question pops up: Why are they willing to pay (financial details of the agreement were not disclosed) to be able to create innovation or customization on top of Infomix? For the Informix fans out there the answer is pretty obvious.... Because Informix is so good! I dare others to suggest other reasons...
  3. A broader penetration in the Chinese market will probably put Informix in the radar of many application suppliers. Would you want to continue to ignore a database chosen to be a reference in one of the biggest markets in the world?
  4. This is a hard blow to other competitors
  5. It would be nice if any improvement made by the Chinese partner that is not specific for the local market could be later incorporated into the core product.

Versão Portuguesa
É tempo de relembrar o termo de desresponsabilizarão que está permanentemente do lado direito do blog. Os artigos aqui escritos estão relacionados com o meu trabalho e nunca escondi quem é o meu empregador (nem nunca o esqueci), mas as opiniões aqui apresentadas são minhas e pessoais. Apenas reforço isto porque neste artigo poderei apresentar alguns aspetos extra ao assunto central que podem sugerir opiniões ou opções, o que na realidade não é minha intenção. Apenas pretendo adicionar mais contexto ao assunto base.

Chega de cuidados.... Se tem seguido as suas contas em redes sociais poderá já ter lido ou visto algo sobre um acordo que a IBM estabeleceu relativo ao Informix no mercado Chinês. Membros do conselho de diretores do IIUG, como o  Art Kagel e o  Eric Vercelletto têm publicado artigos, notícias, tweets e publicações no Facebook, etc. Há uns dias a notícia foi publicada no IIUG insider (publicação periódica). Por conveniência coloco aqui no final do artigo também.
O código do Informix foi disponibilizado a um parceiro Chinês, de forma a que possa ser usado para o desenvolvimento de inovações locais direcionadas ao mercado Chinês. O produto daí resultante poderá apenas ser licenciado no mercado Chinês. É uma nota de imprensa pequena, mas com muito conteúdo... Levou-me algum tempo a entender o que isto significa e aceito que não tenha visto todos os ângulos possíveis. Para começar este processo parece algo novo e nunca antes ouvi ou vi referências a algo semelhante feito por qualquer outro fornecedor de software.
Penso que necessitamos de um pouco mais de contexto para entender as razões por detrás deste acordo. Devo assumir também que a China é um mundo bastante desconhecido para mim. Nunca tive qualquer contacto com o mercado, clientes ou entidades oficiais Chinesas. Não ouvimos falar muito da China e quando tal acontece nem sempre é por bons motivos. Mas penso que os seguintes pontos são unânimes:
  1. A importância geográfica, política e económica da China é incontornável. É um país enorme com um mercado enorme e é provavelmente a única região do mundo que tem mantido um crescimento sustentável nos últimos anos
  2. As relações entre a China e o mundo ocidental têm sofrido de alguma tensão. Há relatos de tentativas de cibercrime organizado, espionagem industrial etc.
  3. O governo dos EUA baniu um par de companhias Chinesas de participar em contratação que envolva o governo
  4. A China levantou barreiras à adoção de tecnologia ocidental
  5. A China supostamente está a tentar reduzir o uso do que chamam "IOE" (IBM, Oracle e EMC)
  6. O governo Chinês tenta diminuir a dependência de companhias ocidentais e ao mesmo tempo fomentar os mercados e companhias locais (a agenda nacional para a tecnologia referida na nota de imprensa)
  7. A China necessita de tecnologia para inovar e prosperar. O crescimento do mercado Chinês é uma oportunidade única para as companhias globais
Como se pode imaginar, e novamente refiro que apenas posso fazer isso, pois não possúo qualquer conhecimento especial ou privilegiado, alguns destes pontos parecem contraditórios. Como é que se pode fazer crescer as trocas comerciais se há tanta política envolvida? Como pode a China aumentar o seu uso de tecnologia, não ficando ao mesmo tempo "refém" das companhias ocidentais? Como podem as companhias globais prestar serviços e ajudar na modernização deste enorme país, cumprindo ao mesmo tempo com os objetivos nacionais da China? Estas questões não têm uma resposta fácil e ainda bem que sou apenas um técnico... Fico-me pelos bits e bytes e não tenho de me preocupar com estes assuntos. Mas há quem tenha e por isso me parece que estes acordos podem tornar-se mais habituais visto que são uma forma de abordar estes dilemas. Na verdade, isto não é completamente novo... A IBM vendeu a linha se servidores X (baseados em x86) à Lenovo, uma companhia Chinesa. Também  licenciou a tecnologia Power a companhias Chinesas (na verdade a quem queira produzir processadores compatíveis). Também tem parcerias com companhias locais e entidades oficiais para oferecer produtos adaptados às necessidades específicas do mercado Chinês.
Isto é realmente um passo grande. E naturalmente há pontos muito interessantes. Para referir apenas alguns:
  1. Havendo fortes diretivas do governo Chinês para aumentar o uso de produtos resultantes de inovação local, o Informix torna-se um jogador importante no mercado Chinês. Na verdade conseguem-se encontrar sites locais que referem a utilização de Informix em muitos grandes bancos, companhias de telecomunicações e departamentos governamentais. Isto é naturalmente algo de bom
  2. A China pode usar projetos open-source como o MySQL e o PostgresSQL, criando forks para construir os seus próprios produtos. Na verdade a mesma entidade referida no acordo com a IBM já o fazia. Por isso uma questão óbvia salta à vista: Porque estão dispostos a pagar (os detalhes financeiros não foram divulgados) ara serem autorizados a costumizar e adaptar o Informix? Para os fãs de Informix a resposta é óbvia: Porque o Informix é muito bom!. Desafio os outros a encontrarem outra(s) explicação.
  3. Uma penetração maior no mercado Chinês provavelmente colocará o Informix no radar de muitos fornecedores de aplicações. Quem quererá ignorar uma base de dados de referência num dos maiores mercados do mundo?
  4. Isto é um golpe duro para a concorrência
  5. Seria interessante de melhorias feitas pelo parceiro Chinês que não sejam específicas para o mercado Chinês pudessem ser incorporado no produto core

The press-release / A nota de imprensa:

GBASE and IBM to collaborate on locally innovated database in China

BMI (NYSE: IBM) and General Data Technology Co.,Ltd, known as GBASE announces an agreement today, to create a locally innovated database product for the China marketplace. In support of the China government's national technology agenda, GBASE will develop and sell this local innovation based on IBM Informix technology.

The agreement extends the reach of IBM's Informix database technology into this market by providing a localized solution to better address the rapidly evolving needs of Chinese businesses. The agreement permits GBASE to build and license their own version of IBM Informix database, which will be offered to clients in the Chinese market as a standalone product solution.

The China market for database technology is estimated to be in excess of $700m according to IDC. The partnership between IBM and GBASE can fuel the growth of this market by creating a best in class database solution tailored to the unique requirements of the China marketplace.

"This agreement confirms IBM's innovation and commitment to growth in emerging markets in general and China specifically", states Sean Poulley, Vice President, IBM Databases and Database Management. "Our intent is to help partners and clients gain competitive edge and transform their business with innovative database technologies in China, with China, for China."

Informix is one of the world's most widely used databases, supporting clients who range from the largest multinational corporations to many regional and local small businesses. It is widely deployed in the retail, banking, manufacturing and government segments, all of which are important growth areas in China today.

Informix is well known for its innovative design, which enables a single platform that powers both OLTP and OLAP workloads for real-time analytics, scales easily for cloud environments and provides continuous availability. It's renowned for extremely high levels of performance and availability, distinctive capabilities in data replication and scalability, and minimal administrative overhead. With this partnership agreement these advantages will be made more readily available to the fast-growing Chinese market.

Wednesday, October 29, 2014

Future... / Futuro...

Directly from IBM Insight via Twitter, some future features (original version here)



English version
The image below was recently twitted by the oficial @IBM_Informix twitter account with the following comment:

" Key Product Features in #Informix xC - Next coming within the next 12 months or so. #IoT #ibminsight "

It looks brave and bright... I call for your attention to the top right corner... And naturally the work started for multi-tenancy will probably continue

Versão Portuguesa
A imagem abaixo foi publicada recentemente no Twitter pela conta oficial do Informix no Twitter com o seguinte comentário:

" Key Product Features in #Informix xC - Next coming within the next 12 months or so. #IoT #ibminsight "

Parece ser um futuro desafiador e claro... chamo a sua atenção para o canto superior direito... E naturalmente será de esperar a continuação do trabalho iniciado com o multi-tenant















Embedded image permalink





Monday, October 20, 2014

RESTing...

Let's take Informix for RESTing (original version here)

English version
After a couple of tiring weeks I feel it's time for a REST. Naturally I'm playing with words, and I'm referring to the new Informix ability to answer REST API requests. This was introduced recently in version 12. REST is the acronym for REpresental State Transfer. Very basically this is an architecture design that can be used to implement web services, or in a very simplistic manner a way to offer services based on HTTP requests.
IBM gave Informix the ability to answer REST requests. This was implemented using the same listener code that was previously introduced to accept MongoDB API protocol. But now we can start the listener with a different configuration that turns it into a REST gateway. In very generic terms we can map the following HTTP methods to SQL requests:

  • HTTP GET
    Select
  • HTTP POST
    Insert
  • HTTP PUT
    Update
  • HTTP DELETE
    Delete
The setup is very easy. Just locate the file jsonListener-example.properties in your $INFORMIXDIR/etc folder and change a couple of properties. For simplicity I deactivated authentication. The properties I changed were:
  • authentication.enable=false
  • authentication.localhost.bypass.enable=true
  • database.dbspace=dbs1
  • database.locale.default=en_US.819
  • listener.port=30001
    The TCP port where I'll receive REST requests
  • listener.type=rest
    To configure this listener as a REST listener (as opposed to MongoDB API listener)
  • security.sql.passthrough=true
  • url=jdbc:informix-sqli://primary:10020/sysmaster:INFORMIXSERVER=alfama;USER=informix;PASSWORD=password;DB_LOCALE=en_US.819
I saved the new file as jsonListener-rest.properties and then I started the new listener:
java -cp $INFORMIXDIR/bin/jsonListener.jar:/usr/informix/tomcat/tomcat-embed-core.jar com.ibm.nosql.informix.server.ListenerCLI -config $INFORMIXDIR/etc/jsonListener-rest.properties -logfile /usr/informix/logs/alfama.jsonListener-rest.log -start

Now we're in conditions to send REST requests to the database. The answers will be received in JSON format. In order to try this I created a very simple HTML page using some JavaScript. The code is:
<html>
<head>
<title>Informix REST access&lt/title>

<script language="JavaScript" type="text/javascript">

function ajaxget(){
   var mygetrequest=new XMLHttpRequest();
   mygetrequest.onreadystatechange=function(){
      if (mygetrequest.readyState==4){
         if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
            document.getElementById("result").innerHTML = mygetrequest.responseText;
         }
         else{
            alert("An error has occured making the request");
         }
      }
    }
    var customerNum = encodeURIComponent(document.getElementById("customerNum").value);
    mygetrequest.open("GET", "http://primary:30001/stores/customer?query="+encodeURIComponent("{customer_num:"+customerNum+"}"), true);
    mygetrequest.send(null);
}

</script>

<body>

<form action="javascript:ajaxget()" method="get">
   <table>
    <tr>
       <td>Customer Num:</td>
       <td><input id="customerNum" name="customerNum" size="30" type="text" /></td>
    </tr>
    <tr>
      <td></td><td><input onclick="ajaxget()" type="button" value="submit" >
</td&gt
    </tr>
   </table>
</form>

<div id="result">
</div>
</body>

This translates into this page:



 And if we type a customer number, let's say "101" and press ENTER or Submit, it will call the REST API which will return a JSON document that we display:



For clarity, the JSON response was:
{
"customer_num":101,
"fname":"Ludwig",
"lname":"Pauli",
"company":"All Sports Supplies",
"address1":"213 Erstwild Court",
"address2": null ,
"city":"Sunnyvale",
"state":"CA",
"zipcode":"94086",
"phone":"408-789-8075"
}
This might sound familiar, as it's the same result you'd get from:
SELECT * FROM customer WHERE customer_num = 101;

How did I do it? Very simply just by sending a GET HTTP request with the following details:
http://primary:30001/stores/customer?query={customer_num:"101"}


Let's split this:
  • primary:30001
    hostname:port where the listener is listening
  • /stores
    The database name
  • /customer
    The table
  • query={customer_num:"101"}
    The "WHERE clause", in this case just
Very simple. For more detailed information please check the JSON compatibility guide. What I'd like to stress is how easy it is to reach Informix and get and put data on it. No drivers. Just the omnipresent language of today, called JavaScript. You can use it in your browsers, or in server side applications using Node.js and any of the well known application development frameworks that use Javascript.


Versão Portuguesa
Depois de um par de semanas bem cansativas, penso que é tempo para REST. Sim, estou a brincar com as palavras, e refiro-me à nova funcionalidade do Informix para responder a pedidos REST. Isto foi introduzido recentemente na versão 12. REST é o acrónimo para REpresental State Transfer. De forma muito simples isto é uma arquitetura que permite disponibilizar web services baseados em pedidos HTTP.
A IBM deu ao Informix a possibilidade de responder a pedidos REST. Isto foi implementado usando o mesmo código Java que permite ter um listener para a API do MongoDB. Mas agora podemos iniciar o listener com um ficheiro de configuração diferente que o torna num gateway REST. De uma forma ainda muito genérica podemos mapear os seguintes métodos HTTP nos respectivos tipos de instrução SQL:
  • HTTP GET
    Select
  • HTTP POST
    Insert
  • HTTP PUT
    Update
  • HTTP DELETE
    Delete
A configuração é muito fácil. Basta procurar o ficheiro jsonListener-example.properties em $INFORMIXDIR/etc e mudar algumas propriedades. Por simplicidade desactivei a autenticação. As propriedades que mudei foram::
  • authentication.enable=false
  • authentication.localhost.bypass.enable=true
  • database.dbspace=dbs1
  • database.locale.default=en_US.819
  • listener.port=30001
      O porto TCP onde irei receber os pedidos REST
  • listener.type=rest
    To configure this listener as a REST listener (as opposed to MongoDB API listener)
  • security.sql.passthrough=true
  • url=jdbc:informix-sqli://primary:10020/sysmaster:INFORMIXSERVER=alfama;USER=informix;PASSWORD=password;DB_LOCALE=en_US.819
Gravei o novo ficheiro com o nome jsonListener-rest.properties e depois lancei o novo listener:
java -cp $INFORMIXDIR/bin/jsonListener.jar:/usr/informix/tomcat/tomcat-embed-core.jar com.ibm.nosql.informix.server.ListenerCLI -config $INFORMIXDIR/etc/jsonListener-rest.properties -logfile /usr/informix/logs/alfama.jsonListener-rest.log -start

Estamos agora em condições de enviar pedidos REST para a base de dados. As respostas serão recebidas em formato JSON. Para testar isto criei uma página HTML muito simples, com uma função em JavaScript. Eis o código:
<html>
<head>
<title>Informix REST access&lt/title>

<script language="JavaScript" type="text/javascript">

function ajaxget(){
   var mygetrequest=new XMLHttpRequest();
   mygetrequest.onreadystatechange=function(){
      if (mygetrequest.readyState==4){
         if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
            document.getElementById("result").innerHTML = mygetrequest.responseText;
         }
         else{
            alert("An error has occured making the request");
         }
      }
    }
    var customerNum = encodeURIComponent(document.getElementById("customerNum").value);
    mygetrequest.open("GET", "http://primary:30001/stores/customer?query="+encodeURIComponent("{customer_num:"+customerNum+"}"), true);
    mygetrequest.send(null);
}

</script>

<body>

<form action="javascript:ajaxget()" method="get">
   <table>
    <tr>
       <td>Customer Num:</td>
       <td><input id="customerNum" name="customerNum" size="30" type="text" /></td>
    </tr>
    <tr>
      <td></td><td><input onclick="ajaxget()" type="button" value="submit" >
</td&gt
    </tr>
   </table>
</form>

<div id="result">
</div>
</body>

Isto traduz-se na seguinte página:



E se inserirmos um número de cliente, digamos o "101" e dermos ENTER ou Submit, o código irá chamar a REST API, que por sua vez retorna um documento JSON que mostramos abaixo:



Por clareza, a resposta JSON foi:
{
"customer_num":101,
"fname":"Ludwig",
"lname":"Pauli",
"company":"All Sports Supplies",
"address1":"213 Erstwild Court",
"address2": null ,
"city":"Sunnyvale",
"state":"CA",
"zipcode":"94086",
"phone":"408-789-8075"
}
Isto pode parecer familiar, pois é o mesmo resultado que se obtém com:
SELECT * FROM customer WHERE customer_num = 101;

Como é que o fiz? Muito simplesmente enviando um pedido HTTP GET com os seguintes detalhes:
http://primary:30001/stores/customer?query={customer_num:"101"}

Vamos partir isto:
  • primary:30001
    Nome da máquina e porto onde o listener está à escuta
  • /stores
    O nome da base de dados
  • /customer
    A tabela
  • query={customer_num:"101"}
    A cláusula "WHERE", neste caso apenas com um filtro na coluna customer_num com o ovalor 101
Muito simples. Para informação mais detalhada consulte o guia de compatibilidade JSON. O que gostaria de salientar é quão fácil é alcançar o Informix e obter ou enviar dados para ele. Sem drivers. Apenas com a linguagem omnipresente dos dias de hoje, o JavaScript. Pode usá-la nos browsers ou do lado do servidor com Node.js e qualquer uma das suas famreworks de desenvolvimento aplicacional que usam JavaScript