segunda-feira, 12 de dezembro de 2016

Corrigindo erros do DirectDraw no Wine ou, Como jogar Diablo 1 no Ubuntu

Depois de perder meu fim de semana tentando rodar Diablo no Ubuntu Mate 16.04, consegui fazer funcionar. Não funcionava nem no PlayOnLinux.

Aparentemente o problema é no DirectDraw, por isso é necessário um "hack" do arquivo ddraw.dll.


  1. Baixar o DirectDraw Hack. Está hospedado oficialmente em https://code.google.com/archive/p/ddhack/, mas nunca se sabe quando poderá mudar.
  2. Descompacte os arquivos para o diretório do jogo no Wine (geralmente: em ~/.wine/drive_c/Diablo)
  3. Execute o arquivo ddraw_renderer.sh e preencha com as informações que se pede. Isto  atualizará o registro do Wine.
Funcionou com Diablo e Hellfire (necessário colocar os arquivos na pasta ~/.wine/drive_c/SIERRA/HELLFIRE)

Testei apenas no Ubuntu Mate 16.04 com Wine 1.6.2. Não é uma solução perfeita. Vários defeitos aparecem na tela de abertura e nas opções, mas o jogo está funcionando bem, com som e rápido.

sexta-feira, 19 de agosto de 2016

Dependências do NS-3 para Ubuntu 16.04

O NS-3 é um simulador de redes para linux que possui muitos módulos com as mais diversas dependências. Quando a gente está começando as pesquisas e não tem muita ideia do que vai precisar. O que fazer? Instalar tudo? De acordo com a Wiki do NS-3 (https://www.nsnam.org/wiki/Installation) há uma lista de dependências para diversos sistemas operacionais, mas nem todas são necessárias. O script abaixo resume todas as dependências para o Ubuntu 16.04 e pode ser executado de uma vez com sudo.



domingo, 15 de maio de 2016

ENDERÇEO IP, MÁSCARA DE SUB-REDE E SUB-REDES



Veja bem. Essa divisão de máscara e sub máscara serve facilitar a transmissão. Se meu computador estiver na mesma rede que outro computador, ele só precisa conhecer o endereço de host para se comunicarem.


1. O ENDEREÇO IP

Tudo começa em como um endereço IP é estruturado. Lembre-se que salvo alguns casos especiais, cada endereço IP é único em todo o mundo. E em qualquer caso, não pode existir dois endereços IPs iguais na mesma rede, isso gera um erro chamado "Conflito de IPs".

 Um endereço IP é composto por um número de 32 bits (4 bytes) separados em 4 grupos de 8 bits (1 byte cada).

--
ex
Em Decimal = 189.6.76.152
Em Binário = 10111101.00000110.01001100.10011000
--

Esse numero do endereço é separado em duas parte. Uma parte é chamado endereço de rede e a outra parte é chamado endereço de host (host é qualquer dispositivo que transmite e/ou recebe dados na rede).

Quem define qual parte é o endereço de rede e qual parte é o endereço de host é a Máscara de sub-rede.


2. A MÁSCARA DE SUB-REDES

A máscara de sub-rede é um número de 32 bits que possui vários 1's da esquerda para a direita.

--
Ex.
Em binário = 11111111.11111111.00000000.00000000
Em decimal = 255.255.0.0
Abreviado = /16
--

Por causa do tanto de 1's é normal uma abreviação. No exemplo acima, a máscara 255.255.0.0 pode ser abreviada por /16 porque possui 16 números 1's. uma máscara /28 = 11111111.11111111.11111111.11110000 = 255.255.255.240

--
Por exemplo:
o endereço = 189.6.76.152
e a máscara = 255.255.255.240

Pode ser representado por 189.6.76.152/28
--

A máscara de sub-rede (ou somente máscara) divide o endereço em dois: O endereço da rede e o endereço do host. No exemplo acima, se colocarmos a máscara de sub rede embaixo do endereço IP e aplicarmos uma operação lógica "AND" obtemos o endereço de rede. Ou seja, o endereço de rede serão os n bits do lado esquerdo do endereço IP, onde n é o número de 1's da máscara.

--
ex:
189.6.76.152/16

10111101.00000110.01001100.10011000 Endereço IP
AND
11111111.11111111.00000000.00000000 Máscara
-----------------------------------
10111101.00000110.00000000.00000000 Rede
(16 bits, o resto é zero)

Então o endereço de rede é 189.6.0.0/16
--

É muito importante você escrever a máscara junto com o endereço de rede porque podem existir ao mesmo tempo duas redes iguais, porém com mascaras diferente.

O endereço de Host se obtém com a operação "XOR" (OU exclusivo) do endereço de rede com o endereço IP. Que são os bits restantes, neste caso 0.0.76.152

--
Ex.
10111101.00000110.01001100.10011000 Endereço IP
XOR
10111101.00000110.00000000.00000000 Rede
-----------------------------------
00000000.00000000.01001100.10011000 Host
em decimal = 0.0.76.152
--

Assim, o endereço IP é uma operação "OR" da Rede com o Host.

--
Ex.
Endereço de rede 189.6.0.0/16
Enderçeo de Host 0.0.76.152

10111101.00000110.00000000.00000000 - Rede
OR
00000000.00000000.01001100.10011000 - Host
-----------------------------------
10111101.00000110.01001100.10011000 - Endereço IP
--


3. EXEMPLOS

1)
Endereço 200.200.100.100/18
11001000.11001000.01100100.01100100/18

a máscara é 11111111.11111111.11000000.000000 (dezoito 1's)
em decimal = 255.255.192.0

são 18 bits da esquerda para a rede e o restante 32-18 = 14 bits (32 é o numero total de bits)... 14 bits da direita são para os host.

endereço de rede =
200.200.64.0/18 (18 bits)
11001000.11001000.01000000.00000000

endereço de host =
0.0.36.100 (14 bits)
00000000.00000000.00100100.01100100

2)
69.1.87.20/12
01000101.00000001.01010111.00010100/12

a máscara é 11111111.11110000.00000000.00000000 (doze 1's)
em decimal 255.252.0.0

endereço de rede =
69.0.0.0/12 (12 bits)
01000101.00000000.00000000.00000000

endereço de host =
0.0.39.122 (20 bits)
00000000.00000001.01010111.00010100

3)
Endereço
192.168.100.10/24
11000000.10101000.01100100 .00001010/24

Máscara
255.255.255.0
11111111.11111111.11111111.00000000

Endereço de rede
192.168.100.0/24
11000000.10101000.01100100.00000000

Endereço de Host
0.0.0.10
00000000.00000000.00000000.00001010


4. ENDEREÇOS ESPECIAIS

Cada rede comporta um numero de computadores conectados de acordo com sua máscara de sub-rede.

--
por exemplo:
A rede 192.168.0.0/16 possui 16 bits para a rede e 16 bits para os Hosts, isso quer dizer que esta rede pode ter até no máximo 65536 endereços que vão do 192.168.0.0 até o 192.168.255.255.
--

Porém, o primeiro endereço (192.168.0.0) e o último (192.168.255.255)são endereços especiais.

O de final zero é reservados para os endereços de rede (nesse caso para a própria rede 192.168.0.0/16) e os endereços de final 255, por exemplo 192.168.255.255, que são reservados para uma coisa chamada Broadcast (discutiremos isso outra hora).

Tirando esses dois endereços, todos os outros endereços de Host podem ser usados em computadores na mesma rede. Então dos 65536 endereços, apenas 65534 podem ser utilizados.

--
Por exemplo

A rede 71.34.0.0/18
Possui 18 bits para rede e 14 bits para Host. 2^(14) = 16384
Essa rede possui 16384 endereços. Mas como dois são especiais, há 16382 endereços de host.
Se você fizer as contas, verá que os endereços vão de 71.34.0.1 até 71.34.63.254.
--


5. SUB REDES

As vezes uma rede tem uma quantidade muito grande de endereços disponível e para evitar desperdício de endereços (ou seja, muitos endereços não utilizados) é melhor sub dividir uma rede em redes menores. Essas são as sub-redes.

A gente obtém uma sub-rede pegando o endereço de Host e dividindo novamente em sub-rede e host.

OBS. Você só pode dividir em 2^x sub redes, onde x é o numero de bits que vc usa para sub redes. Não tem como dividir em 3 sub redes. tem que arredondar pra cima. Tipo, se vc precisa dividir em 6 sub redes, não dá. Tem que dividir em 8 ou em 4.

--
Exemplo 1
192.168.34.0/24
11000000.10101000.00100010.00000000 Rede
11111111.11111111.11111111.00000000 Mascara
00000000.00000000.00000000.XXXXXXXX Host

Possui 8 bits para Host = 256 endereços.

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Dividindo em 4 sub-redes:
pegamos dois bit porque 2^2 = 4
00000000.00000000.00000000.SSXXXXXX

Assim teremos 6 bits para hosts que dará 64 endereços em cada rede. Mas como dois endereços de cada sub rede são especiais (endereço de rede e endereço de broadcast), cada sub-rede poderá conectar 62 dispositivos totalizando 248 dispositivos nas quatro sub-redes.

|Rede 192.168.34.0/24
||192.168.34.0/26 -> Endereço de rede /25 = 24 + 2
||.
||. (Sub-Rede 1)
||.
||192.168.34.63 -> Endereço de Broadcast
||
||192.168.34.64/26 -> Endereço de rede /26 = 24 + 2
||.
||. (Sub-Rede 2)
||.
||192.168.34.127 -> Endereço de Broadcast
||
||192.168.34.128/26 -> Endereço de rede /26 = 24 + 2
||.
||. (Sub-Rede 3)
||.
||192.168.34.191 -> Endereço de Broadcast
||
||192.168.34.192/26 -> Endereço de rede /26 = 24 + 2
||.
||. (Sub-Rede 4)
||.
||192.168.34.255 -> Endereço de Broadcast

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Dividindo em 64 sub-redes (O máximo possível):
pegamos seis bit porque 2^6 = 64
00000000.00000000.00000000.SSSSSSXX

Assim teremos 2 bits para hosts que dará 4 endereços em cada rede. Mas como dois endereços de cada sub rede são especiais (endereço de rede e endereço de broadcast), cada sub-rede poderá conectar 2 dispositivos (veja que vai sobrar apenas 2 endereços para os dispositivos e não tem jeito de sobrar menos) totalizando 128 dispositivos nas duas sub-redes.

Os endereços 192.168.34.0, 192.168.34.127, 192.168.34.128 e 192.168.34.255 são os endereços especiais.

|Rede 192.168.34.0/24
||192.168.34.0/30 -> Endereço de rede /30 = 24 + 6
||.
||. (Sub-Rede 1)
||.
||192.168.34.3 -> Endereço de Broadcast
||
||192.168.34.4/30 -> Endereço de rede /30 = 24 + 6
||.
||. (Sub-Rede 2)
||.
||192.168.34.7 -> Endereço de Broadcast
||
||.
||.
||.
||
||192.168.34.252/30 -> Endereço de rede /30 = 24 + 6
||.
||. (Sub-Rede 64)
||.
||192.168.34.255 -> Endereço de Broadcast


--
Exemplo 2:

A rede 71.34.0.0/18 possui 14 bits para os host. Podemos dividi-los em 64 redes menores pegando os 6 bits do endereço de host (2^6=64) para usar como sub redes e os bits restantes (8 bits) serão 256 endereços dentro dessa sub-rede. Mas como dois endereços são especiais, cada sub-rede terá no máximo 254 hosts.

71.34.0.0/18 Rede e Máscara
01000111.00100010.00000000.00000000 -> Rede
11111111.11111111.11000000.00000000 -> Mascara
00000000.00000000.00XXXXXX.XXXXXXXX -> Hosts

00000000.00000000.00SSSSSS.XXXXXXXX
Pego 6 bits para sub-redes (S) teremos 2^6=64 sub redes
Cada sub-rede terá 8 bits de hosts = 2^8 = 256 endereços.
Como dois endereços são especiais, cada sub-rede pode conectar 254 dispositivos.
--

"Esse resumo foi feito com base em memórias sem nenhuma referência específica, mas de acordo com o que eu me lembrava do Tanenbaum, Kurose, Soares, Fourozan, Wikipedia, Cormer, etc."

segunda-feira, 4 de abril de 2016

Corrigindo codificação e idioma em Latex

Minha orientadora sugeriu usar o Overleaf para terminarmos um artigo em Latex. É uma ótima ferramenta para trabalho colaborativo, mas tive alguns problemas com a codificação dos caracteres após a compilação. Sem muito esforço consegui solucionar adicionando ao preâmbulo do documento os seguintes pacotes:

\usepackage[brazilian]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
Não sou expert em Latex a ponto de descrever cada um destes pacotes, mas sei que são responsáveis pela codificação dos caracteres, substituindo o uso de macros (\'a por á) e a linguagem de alguns elementos como Capítulo em vez de Chapter, por exemplo, não necessariamente nesta ordem.

Achei essa dica em https://aleteia.wordpress.com/2008/07/30/latex_e_acentos/

Mas caso a opção brazilian estiver com erro, talvez o pacote de língua portuguesa não está instalado. Procure instalar o pacote faltando. No ubuntu 16.04.1 o comando é:

sudo apt-get install texlive-lang-portuguese