Mostrando postagens com marcador Software. Mostrar todas as postagens
Mostrando postagens com marcador Software. Mostrar todas as postagens

quinta-feira, 28 de agosto de 2014

Distribuição e comercialização de software - SaaS - Vantagens e Desvantagens

O SaaS segue o molde ASP¹, geralmente os aplicativos funcionam hibridamente, uma parte pela internet e a outra instalada na sua máquina, e são comercializados através de assinaturas. Com essas características, o SaaS é frequentemente confundido com as redes sociais e serviços de stream,
o que pode soar equivocado para alguns, porque de uma certa maneira eles não estão comercializando softwares e sim mídias (textos, áudio, vídeo).

Vantagens

1. Geralmente o SaaS é alugado, o que diminui o custo de investimento inicial.
2. Não necessita altos investimentos em hardware, todo processamento e armazenamento acontecem em servidores.
3. Portabilidade, seu software está disponível em qualquer dispositivo compatível, não sendo necessário a compra de novas licenças.
4. Use imediatamente, não é necessária instalação e as atualizações são automáticas.
5. Alta compatibilidade com diversos dispositivos.
6. Os aplicativos são customizáveis.
7. Permitem o White-label².

Desvantagens

1. Geralmente o SaaS é alugado, o que aumenta o custo do investimento à longo prazo.
2. Dependente da conexão com a internet.

Observação: As vantagens e desvantagens podem variar dependendo do usuário e do software.

------------------------------------------------------------------------------------------------------------------------
¹ Application Service Providers - para mais informações leia a postagem " Distribuição e comercialização de software - APS".

² Geralmente para expandir a marca as empresas entram em ramos diversificados, o problema dessa expansão é que muitas vezes a empresa não tem fundos ou não pretende se arriscar investindo em maquinários para a produção de um produto não convencional, por isso elas recorrem ao White-Label (que significa Rótulo branco), que consiste em uma empresa especializada no ramo produzir um produto ou serviço com a finalidade de disponibiliza-lo para outra empresa possa colocar sua marca e revender, por isso o termo “Rótulo Branco”. O exemplo mais comum de observar são os supermercados que vendem produtos com a sua marca.

Observação: Não confundir com terceirização ou distribuição, nesses dois casos apesar de inserido o nome da empresa que revende ou contrata, ainda permanece a marca da produtora (o que não ocorre no White-label).
-------------------------------------------------------------------------------------------------------------------------

Referências:
http://msdn.microsoft.com/pt-br/library/aa905332.aspx
http://www8.hp.com/br/pt/software-solutions/software.html?compURI=1224674#.U_XdvZUg97g
http://www.ondaempresas.com.br/servicos/datacenter/saas/
https://www.asaas.com/blog/software-como-servico-como-tudo-comecou/

quarta-feira, 9 de julho de 2014

Distribuição e comercialização de software - SaaS - O que é?

Surgimento do SaaS



O avanço dos meios de comunicação, principalmente o da internet, permitiu progresso em diversas áreas, com essa expansão as empresas tinham necessidades novas que precisavam ser supridas, não com produtos, mas sim com serviços. O final do século XX foi marcado por um evento tão extraordinário que mudou culturas, moldou a nova realidade e definiu novos parâmetros para o sucesso: a consolidação do toyotismo.



O novo sistema de produção ajudou para ascensão do setor terciário, as indústrias necessitavam de mão de obra mais qualificada e serviços melhores executados se alvejasse praticar o just in time¹, o que levou a contratação de empresas terceirizadas. Esse mesmo conceito foi disseminado na computação, a ideia de desenvolver o próprio software como um produto não parecia atender todos os públicos e com o desenvolvimento da computação em nuvem surgiu o SaaS.

O que é SaaS?



SaaS, é uma sigla em inglês que significa Software como um serviço que é o termo utilizado para descrever os aplicativos onde os consumidores o utilizam através a internet. Os aplicativos SaaS possuem grandes vantagens comparados aos aplicativos convencionais, tanto que o Microsoft aderiu a esse sistema disponibilizando o Office Online para usuários do Outlook. Esse tipo de software é hospedado na nuvem e podem ser acessado através de qualquer dispositivo com acesso à internet que possua certos requerimentos para que as aplicações possam rodar sem problemas, mas que não exige altos investimentos em hardware, uma vez que o processamento e armazenamento não acontece no computador cliente.

As empresas em ascensão e usuários corporativos são o foco desse tipo de serviço que é altamente portátil e personalizável, porque sua taxa de investimento é pequeno e seu acesso é fácil e prático. Outra denominação utilizada é o termo é software-sob-demanda

Referências:
SaaS

sábado, 14 de junho de 2014

Interpretadores

Interpretadores

Um interpretador é um programa utilizado para ler o código fonte escrito em certa linguagem de programação e o transformar em código executável em tempo de execução (runtime), ou seja, ao contrário do compilador não há criação de um aplicativo executável, o código fonte é executado assim que fornecido ao interpretador. Alguns interpretadores trabalham lendo e executando cada linha de código por vez, e outros leem o código fonte inteiro e depois o executa.


Imagem 1. Intepretador. Fonte: Produzida pelo Autor 
Tanto a fase analítica quanto a semântica da interpretação são parecidas com as utilizadas nos compiladores, a diferença se dá no ponto que o interpretador cria uma base de dados (estrutura interna) para realizar suas operações. Há vários tipos de interpretação, podendo ser do código fonte ou de um código intermediário.
Na interpretação do código fonte o interpretador necessita criar uma estrutura de dados chamada de árvore do programa para depois executar os comandos arquivados nela, nesse modo de trabalho é um consumo muito alto de memória e consequente sobrecarga de trabalho, pois cada operação (comando) específica é executada por um módulo específico, e códigos contendo estruturas condicionais e de repetição necessitarão de mais módulos cada vez que forem executados. Já na interpretação do código intermediário o interpretador já tem um código otimizado (pois durante a geração do código há otimizações) e percorre-o executando as instruções, esta forma é mais eficiente que a interpretação direta do código fonte.
Próximo post explicarei sobre as vantagens e desvantagens da utilização de um interpretador.
Fonte:
Divisão de Ciência da Computação – ITA Disponível em: http://www.comp.ita.br/
Interpretador. Wikipedia, a enciclopédia livre. Disponível em: http://pt.wikipedia.org/wiki/Interpretador


domingo, 18 de maio de 2014

Compiladores : Estruturação (Continuação)

Geração de Código Intermediário


Como prometido, agora irei explanar de forma sucinta e objetiva (e provavelmente entendível) como funciona  a fase de geração de código intermediário, onde o compilador agora transformará todos as representações criadas (se você ainda não leu sobre essas representações dá uma olhada no meu último post)  em uma única forma intermediária, como se fosse um programa para um computador abstrato (como fazemos algoritmos em pseudocódigo) , tendo como objetivo criar uma forma cuja tradução para o código final seja fácil. A representação é criada numa linguagem próxima ao assembly, mas diferente da geração de código final, independe do processador pois os compiladores não trabalham com o código específico de um processador nesta fase, as formas usuais para essa representação são a notação posfixa e o código de três endereços.
O código de três endereços é uma forma de representação assim chamada pois consiste em sequências parecidas com instruções assembly, utilizando apenas três variáveis por instrução, onde cada operador pode atuar como um registro, é construída geralmente da forma z = x op y, sendo utilizada uma variável para armazenar o resultado e outros dois operandos e sua respectiva operação do outro lado.  Por exemplo:

                                                               a = c + d * b

Essa expressão seria traduzida da seguinte forma:

                                                               t1 = d * b
                                                               a  = c + t1

Como você pôde perceber as instruções são separadas na sequência em que serão executadas e necessariamente são criadas variáveis temporárias (t1) para transladar o código. O código de três endereços possui alguns pontos fracos como utilizar não mais que uma operação por vez, de ordem fixa, e ainda há a necessidade de criação de variáveis temporárias. Além das operações binárias podem ser feitas operações de atribuições, chamada de funções, instruções de desvio.

A notação posfixa (ou notação polonesa reversa (RPN em inglês)), diferente da aritmética normal, que utiliza seus  operadores entre  os elementos (chamada notação infixa), coloca as operações depois dos operandos não havendo por exemplo a necessidade de parênteses. Tudo fica mais compreensível com exemplos:
Notação infixa:  
      (a + b) * c
Notação posfixa:
       a b + c *
Esse tipo de notação é muito utilizado quando se trabalha com pilhas (stack) e também internamente em linguagens de programação, tem-se a vantagem de realizar cálculos de maneira mais eficiente já que não há necessidade de verificar a precedência de operadores, já que depois de colocados na pilha e calculado um novo elemento será inserido, ex:

                                                               push a
                                                               push b
                                                               add a,b
                                                               pop a
                                                               pop b
                                                               push _result
                                                               push c
                                                               mult  _result, c
                                                               pop c
                                                               pop _result
                                                               push _result


Otimização de Código


A otimização de código é uma fase opcional na compilação, podendo ocorrer em duas fases, a primeira é depois de ser gerado o código intermediário, quando o compilador melhora o próprio código removendo registros e operações desnecessárias ou as substituindo por outra mais eficiente, a outra fase é na geração do código final. A diferença entre essas duas fases é que a primeira não depende do processador já que o código que sofre otimizações é o intermediário, já a segunda fase depende da máquina alvo pois o código final (código assembly ou de máquina) será exclusivo para aquela arquitetura. A otimização leva um tempo significativo para  ser aplicada, sendo que nem sempre vale a pena o tempo consumido.



Geração de Código


A última fase de compilação, aqui o compilador mapeia a representação intermediária do código no código alvo, se o código alvo é código de máquina então registros ou locais de memória são escolhidos para cada uma das variáveis do programa e são escolhidas as operações equivalentes para as instruções intermediárias criadas previamente. Esta é a tarefa mais complicada para o gerador de código pois ele tem de escolher a instrução mais eficiente dentre as possíveis (em máquinas CISC, por exemplo, o trabalho é ligeiramente mais complicado pois há instruções com finalidades semelhantes (soma, incrementação) dificultando assim a escolha), a escolha do local de armazenamento também é complexa tendo em vista que há a possibilidade de se armazenar nos próprios registradores na CPU,  no topo da pilha ou na memória geral. O acesso ao topo da pilha é mais rápido que na memória geral, pois a memória na pilha é organizada de forma automática, o ponto fraco do armazenamento na pilha é o tamanho de dados que é possível alocar, diferente da memória, que tem um acesso mais lento, mas não possui restrições para uso tanto quanto a pilha. Soluções heurísticas e ad hoc são utilizadas para resolver esses problemas.   
                                               
Fonte:
Compilador, Wikipédia, a Enciclopédia Livre. Disponível na Internet via <http://pt.wikipedia.org/wiki/Compilador> 

 Aho, Alfred. V. et. al, Compilers: Principles, Techniques, and Tools, Second Edition. Addison-Wesley, 2007. ISBN 978-0-321-48681-3. Capítulos 1 e 2.

SANTOS, Ricardo. Compiladores I - Capítulo 1, 20-?. PDF. Disponível na Internet via <http://www.facom.ufms.br/~ricardo/Courses/CompilerI/Lectures/Lec01.pdf>

RANGEL, José Lucas. Geração de Código. PDF. Disponível na Internet via http://www-di.inf.puc-rio.br/~rangel/comp/gercod.pdf

Faculdade de Engenharia Elétrica e Computação - Disponível na Internet via http://www.fee.unicamp.br/?q=node/145 


Gostou ? Deixa um comentário aqui embaixo, dúvidas e sugestões são bem vindas. 

quinta-feira, 1 de maio de 2014

Compiladores : Estruturação

Compiladores como bem sabemos (ou não) são softwares básicos que transformam nosso código fonte, escrito em uma linguagem que conseguimos entender de forma mais clara em código de máquina (ou outra linguagem alvo, veja a fig. 1.1 ), que particularmente não consigo entender (se você consegue, meus parabéns),  e nos dá como resultado o nosso programa alvo que pode ser executado. 

Uma das importantes tarefas do compilador é nos indicar erros no código fonte apresentado durante a tradução, já que ele está produzindo um código semanticamente equivalente ao nosso em outra  linguagem, contanto não falaremos aqui da linguagem, mas como um compilador é estruturado, ou seja, vou falar aqui sobre as fases de compilação, sendo ainda mais específico, da fase analítica da compilação.

                              
 Figura 1.1

Fonte: Elaborada pelo Autor

Compilador
                                              
O compilador funciona da seguinte maneira, o compilador transforma nosso código não somente (tampouco diretamente) para o código alvo, as etapas de trabalho são divididas em duas fases: análise (analysis) e síntese (synthesis) (veja a Fig 1.2), a parte analítica “quebra” o programa em pedaços e impõem uma estrutura gramatical nesses pedaços para formar uma estrutura intermediária do programa. A fase analítica da construção ainda checará se a estrutura léxica, sintática  e a semântica foram utilizadas corretamente e notifica o usuário caso encontre erros. Além disso coleta informações sobre o código fonte do programa e as guarda numa estrutura de dados específica chamada de tabela de símbolos .


  Figura 1.2
Fonte: Elaborada pelo Autor
A Tabela de Símbolos é uma estrutura projetada para guardar registros com nome e atributo (tokens), e ter a capacidade de pesquisá-los e acessá-los de forma eficiente. A tabela de símbolos é usada em todo o processo de compilação.

O analisador léxico lê todos os caracteres programa fonte e os agrupados formando lexemas (lexemes), para cada lexema o analisador produzirá um token que possui a seguinte forma <nome do token, atributo do token>, o nome do token é um símbolo abstrato utilizado para referência e seu atributo aponta para a entrada desse token na tabela de símbolos, essa informação salva na tabela é necessária para a análise sintática, semântica e para a geração de código.  Caracteres em branco, comentários e elementos não utilizados são descartados pelo analisador léxico.

O analisador sintático, também chamado de parser utiliza os tokens criados pelo analisador léxico para produzir uma representação em forma de árvore, com a finalidade de representar a estrutura gramatical do fluxo dos tokens, em outras palavras ele checa se a sequência de entrada é válida, enquanto o léxico examina se você escreveu corretamente o sintático examinará se você as dispôs corretamente.

O analisador semântico utilizará a árvore sintática e a tabela de símbolos para verificar a consistência do programa em relação à linguagem, como por exemplo a verificação de tipos, quando o compilador checa se foi passado o operador de tipo necessário para aquela operação. Ex: em C é necessário que o índice de um vetor seja um número inteiro (>=0), na análise semântica o compilador checará se por exemplo foi utilizado um número real para designar o índice.
                              ...
                              int a[10]; 
                              ....
                              a[1.3] = 1; //Erro

Depois de feitas essas verificações é gerado o código intermediário, quando inicia-se a fase de síntese da compilação que explicarei no próximo post  (geração de código intermediário, otimização de código e geração do código final).

Referências:

Compilador, Wikipédia, a Enciclopédia Livre. Disponível na Internet via <http://pt.wikipedia.org/wiki/Compilador> 

 Aho, Alfred. V. et. al, Compilers: Principles, Techniques, and Tools, Second Edition. Addison-Wesley, 2007. ISBN 978-0-321-48681-3. Capítulos 1 e 2.

SANTOS, Ricardo. Compiladores I - Capítulo 1, 20-?. PDF. Disponível na Internet via <http://www.facom.ufms.br/~ricardo/Courses/CompilerI/Lectures/Lec01.pdf>