Google

sexta-feira, abril 18, 2008

Como assim não é bug?

A largura variável do scroll bar no data grid não é um bug, mas sim um comportamento esperado. Segundo os projetistas, a largura da barra é de acordo com a largura da coluna que está sendo exibida.
É, acho que na Adobe tem um carinha parecido comigo... hehehehehe

[aharui 1/24/07] That's expected behavior. The vertical scrollbar does the same when you have variable row height. The thumb has to change to show a relative percentage of the total number of columns that you are currently seeing.

Fonte: http://bugs.adobe.com/jira/browse/SDK-9258

Flex-Ajax Bridge, uma alternativa ao ExternalInterface e ao LocalConnection

Isso promete e acho que já está na hora de fazer testes.
Quem tem o Flex 3 já baixou o FABridge (sem saber, hehehehe). Ainda é beta, porém os testes de desenvolvimento deste framework são feitos no IE6 e FF2, nossos requisitos!

De acordo com o site, ele tem gerenciamento de memória automática, a possibilidade de destruir objetos manualmente e manipulador de excessões.

Como estamos com alguns problemas com o ExternalInterface e com o LocalConnection, acho que vale a pena testar isso. Pelo menos onde estamos com problemas...

Veja as limitações desta versão:

The FABridge library is currently in a beta state. It has been tested on Mozilla Firefox 2 (Windows and Linux), Microsoft Internet Explorer 6, Opera 9, and Apple Safari 2.0.4.

Exceptions thrown across the bridge into JavaScript depend on the user having installed Flash Debug Player to display the entire error description. Otherwise, only the error ID is thrown.

For performance reasons, when an anonymous object is sent from ActionScript to JavaScript, the bridge assumes it contains only primitives, arrays, and other anonymous objects, and no strongly typed objects or methods. Instances or methods sent as part of an anonymous object are not bridged correctly.

Veja o que tem no site oficial do Flex sobre a FABridge:

The Flex™ AJAX Bridge (FABridge) is a small, unobtrusive code library that you can insert into an Adobe® Flex™ application, a Flex component, or even an empty SWF file to expose it to scripting in the browser.

To humbly borrow a page from the Ruby on Rails community, FABridge is built with the "don't repeat yourself" principle in mind. Rather than having to define new, simplified APIs to expose a graph of ActionScript objects to JavaScript, with FABridge you can make your ActionScript classes available to JavaScript without any additional coding. After you insert the library, essentially anything you can do with ActionScript, you can do with JavaScript.

Adobe® Flash® Player has the native ability, through the External API (the ExternalInterface class), to call JavaScript from ActionScript, and vice versa. But ExternalInterface has some limitations:

  • The ExternalInterface class requires you, the developer, to write a library of extra code in both ActionScript and JavaScript, to expose the functionality of your Flex application to JavaScript, and vice versa.
  • The ExternalInterface class also limits what you can pass across the gap – primitive types, arrays, and simple objects are legal, but user-defined classes, with associated properties and methods, are off-limits.
  • The ExternalInterface class enables you to define an interface so your JavaScript can call your ActionScript – FABridge essentially lets you write JavaScript instead of ActionScript.

View a sample application that makes use of the Flex AJAX Bridge.
Note: You must install Flash Player 9 to view the sample application.

Fonte: http://labs.adobe.com/wiki/index.php/Flex_Framework:FABridge

Mais do mesmo com Fábio Boucinhas, diretor de produtos do Yahoo! Brasil

Fábio Boucinhas é diretor de produtos do Yahoo! Brasil. Ele veio pra expor o tema: "Internet hoje e amanhã: para onde estamos caminhando?", pela AMCHAM. Levando em conta o que foi abordado, posso ser simplista e dizer que estamos no caminho!

Ele basicamente mostrou números e as três gerações web que a mídia divulga. Digo a mídia, pois vejo esse movimento mais como uma organização de provedores de serviços web (e afins) que querem ganhar dinheiro com o que já existe. Não tem nada de novo em relação ao que conhecemos.

Em relação aos números, o que ficou marcante (para mim), foi que o Brasil é o maior usuário de Orkut do mundo junto a Índia. E que ele usa o serviço de uma maneira totalmente diferente dos indianos. Além disso, muitos serviços que estão "bombando" fora do país, não tem sequer previsão de início das atividades por aqui (embora seja possível usar, em Inglês é claro)! Outra coisa foi o ranking de coisas que os internautas fazem: Ler e-mail, notícias e baixar músicas estão no topo!

Sobre as três web, ele classifica como:

1. Internet de leitura: Primeira geração (página estática, acesso discado)
2. Internet de Participação: Web 2.0 (conteúdo dinâmico produzido por internautas, acesso "banda larga estreita")
3. Internet de Abertura: Próxima geração, com alguns movimentos já iniciados (pontos de abertura como gadGets, mobilidade e acesso banda larga de fato)

Como ele é diretor de produtos do Yahoo! Brasil, não podia deixar de fazer propaganda... Deu destaque à nova interface e jeito de usar do Yahoo! Mail (por sinal bem parecido com o HotMail e com serviços que já existem no GMail). Falou também dos links patrocinados e da possibilidade de utilizar algoritmo de busca de terceiros e a introdução de conceitos como web semântica no buscador.

Questionei a respeito da oferta de compra que a Microsoft fez ao Yahoo!, mas ele disse que sabe, se não menos, exatamente a mesma coisa que eu.

Uma coisa eu tenho certeza: Estamos no caminho certo!
E não posso deixar de falar que o Google vai dominar o mundo! Não me convenci do contrário!

segunda-feira, abril 14, 2008

Primeira Lista de Exercícios de Sistemas Operacionais 2

Professora, situação é com S!

Questão 1


O UNIX é composto por três camadas acima do hardware.

  1. Kernel: Acesso direto às funcionalidades do hardware. Possui as chamadas de sistema que dão suporte aos programas de baixo-nível.

  2. Programas de baixo-nível: Camada adjacente ao Kernel que contém os programas de baixo-nível. Podemos caracterizar estes programas como sendo aqueles que fazem uma interface entre o usuário e o Kernel. Por exemplo: who, sh, vi, grepe, comp, gcc, dentre outros.

  3. Programas de alto-nível: Camada mais externa que contém o “cc” e os outros programas. Geralmente a maioria dos programas está nesta camada e são combinações de chamadas de sistema e chamadas a programas de baixo-nível.


A arquitetura em camadas do UNIX favorece o desenvolvimento de programas modulares prezando a coesão com baixo acoplamento, além de possibilitar a portabilidade com pouco trabalho direto no que já foi feito, bastando alterar a camada de Kernel, em tese.


Questão 2


Os dois modos de execução se diferenciam principalmente quanto ao privilégio de acesso aos dados e a algumas instruções de hardware.

  • Modo usuário: Acesso a informações e dados é mais restrito.

  • Modo Kernel: Acesso privilegiado. Requisito para execução de chamadas de sistema.




Questão 3


Porque ao fazer uso do bloco de construção primitiva “|”, faz com que o ouput de um processo seja o input de outro. Isso causa uma execução seqüencial dos processos e não paralela, conforme pretendido ao usar “&” no final dos comandos.


Questão 4


É uma interrupção manipulada. Quando o sistema está executando uma região crítica, as interrupções são proibidas, assim como a troca de contexto. Isso evita que as estruturas de dados (geralmente listas duplamente encadeadas) essenciais para o controle de estado de um processo sejam danificadas, mantendo a consistência dos dados.
O estado asleep de um processo é quanto à execução do mesmo foi interrompida temporariamente e o processo está na memória principal. Neste estado, as mudanças de contexto são permitidas. As interrupções necessitam de eventos externos para sair deste estado, não ele mesmo gerar um.


Questão 5


As regras de transição de estados de um processo são bem definidas e elas que garantem a consistência dos dados das estruturas internas do Kernel.

  1. Mudança de contexto permitida somente quando processo está no estado asleep.

  2. Processos executados em modo Kernel são não-preempitivos.

  3. Preempção pode ser feita pelo sistema em processos do modo usuário.

  4. Interrupções são proibidas, quando em modo Kernel (regiões críticas).

  5. Um processo não pode mudar o estado de outro.




Questão 6


Race condition é a situação quando temos vários processos do sistema acessando e manipulando ao mesmo tempo a mesma informação de maneira concorrente e o resultado da execução depende da ordem particular em que o acesso ocorre. O race condition é considerado um ataque, pois faz com que um invasor eleve seu nível dentro do sistema, conseguindo um uid = 0, ou seja, privilégio de root.
Deve-se ficar atento ao usar as seguintes funções (elas são as principais causas de race condition):

  • access()

  • chown()

  • chgrp()

  • chmod()

  • mktemp()

  • tempnam()

  • tmpfile()

  • tmpnam()




Questão 7



  1. O Kernel deve escrever o conteúdo do buffer no disco para depois usar o buffer. Ele começa uma escrita assíncrona daquele bloco e tenta alocar outro buffer na lista de livres. Quando a escrita termina, aquele espaço é liberado e colocado na cabeça da lista de livres. O Kernel volta apara o início da lista e refaz o algoritmo.

  2. O Kernel remove da lista de livres e começa a escrever os blocos no disco (os do buffer).
    Nas duas situações, o buffer fica bloqueado, pois está sendo usado pelo Kernel.




Questão 8


Ele será colocado no início da fila de livres quando um erro de I/O ocorrer ou quando o buffer for marcado como “old”. Isso acontece justamente devido ao erro ocorrido, o que faz com que o buffer fique livre e pronto para ser usado por outro processo.


Questão 9


O Kernel eleva o nível de prioridade do processador para garantir a execução atômica das chamadas de sistema em modo Kernel. Não há comando específico para elevar a prioridade do processador. Este é o fato pelo qual isto não aparece no algoritmo.


Questão 10


Principalmente devido ao fato de que outros processos que estão em execução podem ter alocado o buffer disputado entre o momento em que foi para asleep e quando foi “acordado”. Assim, recomeçando a busca, o Kernel garante que não haverá disputa pelo mesmo buffer, podendo até otimizar a alocação ao encontrar um buffer livre na cabeça da lista de livres.

Questão 11



  1. O módulo do subsistema de arquivo antecipa à necessidade de leitura de arquivos seqüenciais, requisitando assincronamente à leitura dos dados na memória principal. O processo fica em estado de espera da leitura completa do primeiro bloco. Ao finalizar, o processo é acordado, mesmo sem que a leitura do segundo bloco tenha completado. Quando este é finalizado, o controlador de disco interrompe o sistema, liberando os blocos por se tratar de um I/O assíncrono. Quando o processo necessita do segundo bloco, ele já está em cache. Assim que o primeiro bloco vai para o cache, o Kernel verifica a presença do segundo através da execução do algoritmo descrito acima.

  2. Isso pode ocorrer devido ao fato de que a escrita dos dados em disco são operações assíncronas ou ocorrem com atraso, deixando “lixo” de informação nos buffers.