Browsed by
Categoria: Uncategorized

Plunder e Urbit: Uma análise comparativa

Plunder e Urbit: Uma análise comparativa

Sistemas operacionais rodam no coração de todos os computadores, e nós do bestlinux somos obcecados por open source. Recentemente, temos dado bastante atenção ao protocolo Urbit e sua rede de computadores descentralizada, e dois textos nos chamaram bastante a atenção.

Primeiro texto: Crítica à Urbit

O primeiro texto é uma crítica à Urbit feita por um antigo membro da Urbit Foundation (~wicrum), comparando-a com o projeto Plumber.

O artigo se aprofunda na transição do autor do trabalho no Urbit para a exploração do Plunder, um sistema com semelhanças com a Urbit, mas com diferenças distintas na filosofia e na arquitetura do projeto. O autor destaca as semelhanças entre os dois sistemas, como a tentativa de criar uma camada fundamental para a computação. No entanto, o foco principal está nas diferenças, com o Plunder sendo retratado como um sistema mais modular e agnóstico em comparação com a abordagem holística do Urbit. O artigo também aborda os aspectos técnicos de ambos os sistemas, enfatizando as vantagens do Plunder em termos de modularidade, compreensibilidade e desempenho.

Três insights instigantes são apontados por ~wicrum:

Holismo vs. Modularidade

Urbit é descrito como um sistema holístico, com o objetivo de resolver todos os problemas relevantes de computação de uma só vez. Ele é comparado à Apple em sua abordagem, oferecendo um ecossistema abrangente e opinativo. Por outro lado, o Plunder é comparado ao Linux, enfatizando a modularidade e o agnosticismo. Ele fornece uma plataforma para vários sistemas operacionais em vez de agrupar tudo. Essa distinção levanta a questão: É melhor ter uma solução única para todos ou uma plataforma que permita soluções diversas e personalizadas?

Preocupações com a centralização

O autor aponta que o Urbit, devido à sua dependência da Fundação Urbit para atualizações e alterações, pode ser visto como um sistema centralizado.

Essa centralização tem implicações políticas (potencial para captura institucional) e tecnológicas (a fundação pode mudar a direção do sistema). O Plunder, por outro lado, foi projetado para ser mais descentralizado.Isso leva ao debate: quanta centralização é aceitável em um sistema e quais são as compensações entre centralização e descentralização?

Desempenho e escalabilidade

Uma das críticas mais importantes ao Urbit são suas limitações no manuseio de grandes conjuntos de dados e na velocidade de computação. O Plunder, de acordo com o autor, já demonstrou sua capacidade de trabalhar com volumes de dados significativos. Essa diferença levanta a questão:Até que ponto a escalabilidade do desempenho é crucial no mundo da computação moderna, e os sistemas que não priorizam isso podem continuar competitivos?

O artigo oferece um mergulho profundo nas complexidades do Urbit e do Plunder, desafiando os leitores a considerar o futuro das plataformas de computação e as compensações entre soluções holísticas e plataformas modulares.

Segundo texto: Urbit como um servidor de arquivos generalista

Em contraposição temos um texto que fala sobre Urbit – a general file service, explicando como a Urbit pode ser usada para compartilhamento e armazenamento de arquivos de qualquer tamanho e tipo.

A Urbit, uma plataforma de computação descentralizada, tem gerado polêmica por seu potencial de revolucionar a maneira como pensamos sobre armazenamento e compartilhamento de arquivos. A questão em questão é se o Urbit pode evoluir para um servidor de arquivos geral, capaz de armazenar e compartilhar diversos tipos de arquivos, de imagens a vídeos, de forma descentralizada. Isso o posicionaria como uma alternativa a sistemas como o IPFS.

Um mergulho profundo no cenário técnico do Urbit

Filosofia básica da Urbit: Na Urbit, tudo é representado como nouns. Esses nouns são serializados e transmitidos pela rede. Todo o estado de uma instância da Urbit é encapsulado em um único valor.

Limitações: Historicamente, duas restrições principais impediram a Urbit de servir como um servidor de arquivos geral:

Ferramentas: A ausência de ferramentas para gerenciar e visualizar facilmente os dados armazenados, o uso da memória e o espaço disponível.
Memória: Até recentemente, o tempo de execução do Urbit, Vere, só conseguia lidar com 2 GiBs de substantivos. Isso foi expandido para 8 GiBs, com potencial de crescimento adicional.

O Projeto Ares: Esse novo tempo de execução do Urbit foi projetado para superar as limitações mencionadas anteriormente. O Ares foi desenvolvido com referências de 64 bits, o que permite lidar com volumes de dados maiores. Ele também introduz a “paginação por demanda”, otimizando a movimentação de dados entre o disco e a memória.

Visão do Urbit:

Em um futuro próximo, o Urbit pretende ser um servidor de arquivos robusto e de uso geral.
Embora seja possível criar uma camada semelhante ao IPFS sobre o Urbit, o foco principal da plataforma é permitir que os usuários (ou seus representantes designados) hospedem e controlem seus dados diretamente.

Proposta de melhoria do Urbit (UIP): Esse sistema é agora o mecanismo principal para a introdução de recursos e funcionalidades essenciais na Urbit.

Uma olhada mais de perto no Projeto Ares

O que é Ares? Ares é o Urbit runtime mais recente, projetado para ser mais rápido e lidar com volumes de dados maiores do que seus antecessores. Ele permite que os usuários hospedem conteúdo multimídia, como fotos e vídeos, em seus navios Urbit.

Principais componentes do Ares:

Geração de código: O Ares apresenta um sistema que compila Nock (linguagem de montagem do Urbit) em código de máquina, otimizando o desempenho da CPU.

2stackz Noun Allocator: Esse recurso permite que o Urbit funcione como uma máquina virtual com duas pilhas, eliminando a necessidade de um heap. Essa alteração aumenta a velocidade e a eficiência da alocação e liberação de substantivos no tempo de execução do Urbit.

Persistent Memory Arena (PMA): O PMA foi projetado para gerenciar grandes volumes de dados sem comprometer o desempenho. Ele otimiza a movimentação de dados entre a RAM e o disco, permitindo que o estado do Urbit cresça sem ser restringido por limitações de hardware.

Limitações: Apesar de seus avanços, a Ares ainda estará limitada pelas restrições do hardware subjacente, especialmente a RAM.
Embora o PMA possa otimizar o gerenciamento de dados, ele não pode superar as limitações inerentes ao hardware.

O projeto Ares representa um salto monumental para a plataforma Urbit, com o objetivo de transformá-la em um sistema mais rápido e eficiente, especialmente para lidar com grandes conjuntos de dados, como imagens e vídeos. Entretanto, como todo software, ele terá suas restrições, principalmente aquelas ditadas pelo hardware em que opera. O futuro parece promissor para a Urbit, e sua evolução será, sem dúvida, um espaço a ser observado.

Para aprender mais, recomendamos também o site em português sobre a Urbit.

 

VHDL como linguagem para sistemas embarcados e circuitos reprogramáveis

VHDL como linguagem para sistemas embarcados e circuitos reprogramáveis

sistema embarcadoMuitas faculdades de engenharia, principalmente engenharia elétrica, ensinam diversas linguagens de programação para seus alunos. Algumas das mais complexas incluem Assembly e VHDL, esta última é a que discutiremos nesse artigo.

O VHDL, acrônimo para “Linguagem de descrição de hardware VHSIC”, do inglês Very High Speed Integrated Circuits, é uma linguagem de processamento paralelo de alta performance e velocidade, utilizada para construção de circuitos digitais por meio de hardwares FPGA, ASICs e CPLDs. A versão mais recente do protocolo padronizado é a IEEE 1076-2008. Semelhantemente às linguagens sequenciais, o VHDL também possui pacotes (packages) que traz libraries prontas.

Boa parte da descrição de um código VHDL é feito diretamente para manipular portas lógicas, como os comandos wait, after, shift left logical, entre outros. Na prática, a manipulação de portas lógicas é útil pois os circuitos integrados vendidos em lojas de eletrônicos são imutáveis, ou seja, sua construção não permite alteração das portas lógicas, a única coisa que pode ser feita é a construção de blocos de diversos CIs para a montagem de um circuito digital completo. Alguns exemplos de circuitos integrados e suas respectivas portas lógicas são:

  • 7400: quatro portas NAND de duas entradas
  • 7430: uma porta NAND de oito entradas
  • 7402: quatro portas NOR de duas entradas
  • 7404: seis inversores com porta NOT
  • 7419: seis inversores Schmitt trigger
  • 7408: quatro portas AND de duas entradas
  • 7411: três portas AND de três entradas
  • 7425: duas portas NOR de quatro entradas com strobe
  • 7442: decodificador BCD para Decimal

O VHDL, além de manipular portas lógicas criando novos circuitos integrados a cada mudança no código, também permite na sua linguagem a utilização de operadores aritméticos, condicionais (como if then), entre outros. A utilização de vhdl para sistemas embarcados é útil pelo fato dos sistemas embarcados serem sistemas computacionais completos e independentes de outras conexões, diferentemente dos computadores de propósito geral (mais complexos), e se encarregam de executar apenas determinadas tarefas pré-definidas, repetidas vezes.

Outra definição para esse tipo de sistema é “sistema embutido”, pois nele constam todos os encapsulamentos e dedicações ao dispositivo controlado. Alguns exemplos de sistemas embarcados incluem: câmera digital, televisão, aparelho de som, brinquedos digitais, modems ADSL, e basicamente qualquer dispositivo com foco em uma única tarefa principal. Os sistemas embarcados surgiram quando a eletrônica como um todo barateou os equipamentos e possibilitou a construção de inúmeros aparelhos portáteis que há 20 anos atrás seriam considerados “de outro mundo”.

Geralmente, a ligação entre o VHDL e o sistema embarcado se inicia na programação feita em um computador desktop que transfere o código para o sistema embarcado nos estágios finais de desenvolvimento, por meio de uma porta USB ou mesmo através da gravação de um chip EPROM (erasable programmable read-only memory).

Manipulando banco de dados em Python

Manipulando banco de dados em Python

estrutura de um banco de dadosDados estão por toda a parte, desde relatórios de empresas tentando catalogar seus produtos físicos até dados 100% virtuais como textos gerados na internet. Acredita-se que um percentual muito pequeno de tudo o que se gera de informação acabe sendo analisado na prática, e para isso que passou a existir a profissão de cientista de dados, ou analista de dados.

Tal profissão utiliza recursos como linguagem Python e linguagem R para tratar os dados antes de conseguir extrair informações úteis. Quando a quantidade de dados é muito extensa, esse trabalho se enquadra na categoria de “Big Data”, um ramo da computação e análise de sistemas que está crescendo vertiginosamente nos últimos anos.

Antes de tudo, para manipular corretamente um banco de dados, é preciso saber a diferença entre dados e informações. Dados são quantificáveis, atributos que podem ser categorizados e tratados via código de programação. Informações não necessariamente podem ser trabalhadas com linguagens de programação a ponto de serem categorizadas, seria necessário para tanto utilizar ferramentas mais avançadas de processamento e compreensão de linguagem que foge um pouco do escopo da análise de dados e avança no escopo da inteligência artificial. Na prática, um cientista de dados precisa aprender a trabalhar com um sistema de gerenciamento de banco de dados (SGBD).

Um SGBD é o conjunto de softwares que irão permitir o gerenciamento do seu banco de dados. Por exemplo, existe o banco de dados MongoDB, que é uma ferramenta muito popular no ramo de análise de dados. Também é possível analisar dados em Python utilizando o pacote Pandas e o Scikit-learn. Em todo caso, um requisito básico para iniciar nesse ramo é ter conhecimento em SQL e noSQL. Um curso para aprender linguagem SQL serve como pré-requisito dentro do processo de compreensão de como tratar bancos de dados em geral.

Os primeiros passos são:

1) Instale o MySQL driver usando um método específico de instalação (para Linux ou Windows).

2) Configure o database, certificando-se de que você possui acesso de administrador com usuário e senha.

3) Obtenha os dados via Python através do módulo MySQLdb. Um código possível para realizar essa ação está listado abaixo:

#!/usr/bin/python
import MySQLdb
 
db = MySQLdb.connect(host="localhost",  # your host 
                     user="root",       # username
                     passwd="root",     # password
                     db="pythonspot")   # name of the database
 
# Create a Cursor object to execute queries.
cur = db.cursor()
 
# Select data from table using SQL query.
cur.execute("SELECT * FROM examples")
 
# print the first and second columns      
for row in cur.fetchall() :
    print row[0], " ", row[1]

Outros assuntos que devem ser estudados nesse ramo incluem: a documentação SQLite e SQLite Browser, SQL para big data, DB-Engines, Big Data Real Time Analytics usando Python e Spark. A partir dessas informações, você estará apto para gerenciar bancos de dados e se aperfeiçoar em uma das áreas mais promissoras do mercado atualmente.