Arquivo do autor: admin

Como faz pra colocar Android 11 com Play Store no Raspberry Pi 4?

Caminho das pedras completo para o projeto de rodar o Android 11 (Android R) e Play Store com a rapidez e o tamanho reduzido do Raspberry Pi 4

Você vai precisar

  • Raspberry Pi 4 model B, 4/8GB
  • MicroSD de 16 GB ou mais
  • Pen drive para “GApps”
  • Teclado/Mouse USB
  • Adaptador HDMI mini
  • Case para Raspberry Pi com cooler
  • Monitor com entrada HDMI

Software de apoio

Passo 1: Download da imagem “Android-like”

A distribuição LineAgeOS (não oficial) na sua versão 18.1 corresponde à versão 11 do Android.
Atenção para a imagem ser compilada para uso em arquitetura ARM ou Raspberry Pi.
O LineAgeOS possui poucos apps instalados e não possui o app do Google Play, necessário para baixar os apps da loja oficial da Google.
Por este motivo, é necessário baixar o GApps compatível com a versão do Android adotada.

Passo 2: Download de GApps compatível

  • BitGapps
    • BiTGApps para Android R (Android 11)
      A versão R16 é compatível
  • NikGapps
    • pacote NikGapps vem com um módulo Assistente de Setup.
      Enquanto a distribuição Gapps pode ter alguns bugs, você pode pular este módulo, usando nikgapps.config ou gravar uma variante sem o Assistente de Setup, que pode funcionar.
  • Instalador do Google (APK)
    • Instala o Google Apps em dispositivos Android, como o Play Services e a Play Store. Você pode baixar manualmente os aplicativos da Google restantes da Play Store (loja do sistema operacional Android).
  • OpenGapps
    • Não possui, até o momento do post deste artigo, versão compatível com ARM e Android 11.
    • Quando liberar, recomenda-se o download da arquitetura ARM, Android 11 e versão “pico”.

Passo 3: Gravar a imagem no microSD

Utilizei um PC com Windows 10 para gravar, usando o Balena Etcher:

Passo 4: Gravar o GApps no pen drive

Para escrever este artigo, foi baixado o BitGApps. Após baixar, copiar o arquivo ZIP para o pen drive.

Passo 5: Reiniciar em modo Recovery

No primeiro boot do microSD no Raspberry Pi, são configuradas a data/hora, fuso horário e idioma.
Em seguida, deve-se configurar em: app de Configuration > System > Gestures > Power menu > habilitar Advanced restart. Com isso, será possível reiniciar em modo Recovery.

Pressionar e manter pressionado a tecla F5 (botão de liga/desliga ou power button) até aparecer a tela abaixo:

Clicar em Recovery.

Passo 6: Instalar o GApps escolhido no passo 2

Após a leitura da mensagem inicial, “deslizar a barra para a direita para permitir modificações”:

Escolher “Mount” para disponibilizar as pastas de sistemas para o modo Recovery usar nos itens seguintes:

Selecionar todas as pastas e clicar em “Select Storage”:

Depois clicar em Install, inserir o Pen drive e escolhê-lo em “Select Storage”:

Selecionar o arquivo baixado no passo 2 e deslizar a barra novamente, para instalar:

Aguarde a instalação para poder reiniciar o seu Raspberry Pi com Android.

Passo 7: Google Play pronto para uso – Fim!

Você verá que o Google Play foi adicionado entre os aplicativos.
Agora é proceder normalmente como em um celular com Android, para instalar todos os aplicativos compatíveis com Android disponíveis no Google Play Store.
Basta baixar os apps gratuitos e instalar para usufruir de um Android que roda leve no Raspberry Pi 4.
Se houver dúvidas, poste nos comentários!

Conexão criptografada em ambiente de desenvolvimento

Pode-se implementar a conexão criptografada em desenvolvimento por meio de Apache e Nginx, porém aqui vou usar o Stunnel – stunnel-5.48-5.el8.0.1.x86_64

https://www.
HTTP over SSL

Criar uma chave privada e o certificado

A chave privada e o certificado serão autoassinados e gerados por meio do comando openssl.

1) Gerar a chave privada – 4096 bits

# openssl genrsa 4096 > stunnel.key

2) Gerar o certificado

# openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert

3) Gerar o arquivo PEM – chave privada + certificado

# cat stunnel.key stunnel.cert > stunnel.pem

Criar o arquivo de configuração do Stunnel

O arquivo de configuração define a versão do protocolo (TLS v 1.0, mas existe até a versão 1.2). As versões SSL v 1, 2 e 3 são obsoletas e inseguras.

pid=

cert = stunnel/stunnel.pem
sslVersion = TLSv1
foreground = yes
output = /var/log/stunnel.log

[https]
accept=8443
connect=8001
TIMEOUTclose=1

Depreende-se da configuração acima que a conexão é feita pela porta 8443, porém ela é “tunelada” para a porta 8001.

Criar um script para ativar o servidor web do Django

Recomendo a ativação do servidor web Django, por meio do script runstunnel.sh abaixo:

stunnel stunnel/dev_https &
python3 manage.py runserver 0.0.0.0:8000 &
HTTPS=1 python3 manage.py runserver 0.0.0.0:8001

Resumo:

  • A conexão HTTP é feita pela porta 8000
  • A conexão HTTPS é feita pela porta 8443
    • A porta 8001 deve estar ativa e é usada pelo stunnel para obter resposta para a porta 8443

Resultado

Há implicações de segurança que impedem que as configurações acima sejam implementadas em produção, sendo as principais:

  • certificado autoassinado – não provê a segurança quanto ao servidor que está respondendo à conexão HTTPS ser realmente o servidor que se acredita estar conectando
  • TLS v 1 – existem versões TLS mais seguras
  • Não limitar ao uso de cifras seguras, somente

Após implementar o HTTPS ao site, o navegador Google Chrome acusa como site inseguro por, principalmente, estar usando certificado autoassinado.

Nginx, Apache, Stunnel, Django, Python, Google e Chrome – são marcas/ferramentas registradas

Servindo páginas com templates e conteúdos estáticos – Django e Bootstrap

Após o tutorial de instalação do Django, vamos criar um “app” dentro do projeto “MeuProjeto” que servirá inicialmente páginas criadas a partir do template baseado em tema do Bootstrap 4 dentro do Django.

A ideia de usar um “app” é a reutilização de código em outros projetos. Ex. app de autenticação, usando Google OAuth 2.0.

O motivo de usar um “app” apenas para servir páginas é adquirir experiência com templates para, depois, usar em aplicações com finalidades.

O que é Bootstrap?

Bootstrap é um framework popular CSS (folha de estilos em cascata) para desenvolvimento de websites responsivos e para celular.

Criando a aplicação “app”

Digite no Terminal Linux:

# django-admin startapp app
# tree app
app
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py
1 directory, 7 files

Consideração a respeito da arquitetura “MeuProjeto”

Os templates podem ser implementados tanto no (1) “MeuProjeto”, quanto no (2) “app”, quanto em (3) ambos. Modelos 1, 2 e 3, respectivamente.

No meu caso, vou implementar os templates apenas em “MeuProjeto” (modelo 1), deixando que o “app” se preocupe apenas com o seu processamento (entradas e saídas), como forma de permitir que a interface seja única em todo o projeto.

Caso eu entenda que o “app” deva ter seus templates, no decorrer da arquitetura, a migração será natural para o modelo 3, ou seja, não acarretará atrasos de projeto.

Alterações em settings.py

Este arquivo trata de definições gerais do projeto “MeuProjeto”.

Alterar a variável ALLOWED_HOSTS para contemplar os possíveis endereços da aplicação (desenvolvimento e produção).

Importante lembrar de remover os parâmetros “localhost” e “endereço_IP” em produção, para evitar falhas de segurança, limitando a configuração para o essencialmente necessário (domínio de hospedagem do site).

ALLOWED_HOSTS = [
  'localhost',
  'meuprojeto.pythonanywhere.com',
  '192.168.0.1',
]

Na variável INSTALLED_APPS, incluir a linha abaixo:

  'app', 

Na variável TEMPLATES, incluir o diretório “templates” no parâmetro DIRS desta variável:

  'DIRS': ['templates'],

No caso de migração para o modelo 3, incluir em DIRS, o elemento ‘meuprojeto/app/templates’.

Ao final do arquivo settings.py, criar a variável STATICFILES_DIRS:

STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]

Template escolhido – SB Admin 2

Trata-se de um template (modelo) gratuito disponível aqui.

Página baseada no template “SB Admin 2” implementada em http://192.168.0.1:8000/app/

Vamos copiar os arquivos necessários para o artigo!

No diretório /root/PycharmProjects/MeuProjeto criar os diretórios static (para conteúdos estáticos como CSS e JS) e templates (para os modelos de páginas).

No static, copiar os diretórios css, img, js e vendor. No templates, copiar o arquivo index.html, renomeando para base.html.

Alterações em urls.py

Este arquivo diz qual é o tratamento para cada URL do MeuProjeto.

Ao editar urls.py, será possível direcionar para as páginas administrativa (admin) e da aplicação (app).

A aplicação admin não é o escopo deste artigo, mas é suportada por django.contrib.

Editar o arquivo urls.py da pasta MeuProjeto, conforme abaixo:

from django.urls import include, path
from django.contrib import admin
from app import urls as app_urls
urlpatterns = [
  path('admin/', admin.site.urls),
  path('app/', include(app_urls)),
]

Como descrito acima na linha “app/“, foi incluído o arquivo app/urls.py designado pelo alias “app_urls” (definido na terceira linha).

Alteração de urls.py do “app”

Este arquivo vai direcionar o caminho (path) vazio, neste caso, que, pelo item anterior, refere-se a /app/, para a função “index” a ser definida em views.py (designado pelo parâmetro views.index).

from django.urls import include, path
from app import views
urlpatterns = [
  path('', views.index, name='index'),
]

Alteração de views.py do “app”

Este arquivo designa o tratamento requisitado por app/urls.py (item anterior).

Assim sendo, será necessário editar o arquivo views.py do diretório /root/PycharmProjects/MeuProjeto/app/ :

from django.shortcuts import render
def index(request):
    return render(request, 'app.html')

O tratamento básico acima refere-se a responder à requisição com o conteúdo do template app.html devidamente interpretado pelo Django.

Daqui até o final do artigo, vamos apenas cuidar do front-end (saída do app).

Alterar o arquivo base.html

Este arquivo servirá de “base”, como o próprio nome diz, para templates secundários, ou herdeiros. Ver Herança no Wikipedia.

Este arquivo base.html tem um código relativamente extenso que não precisa ser alterado em sua totalidade para cada nova aplicação de MeuProjeto, por exemplo, “app de cadastro de usuários”, “app de autenticação via Google OAuth 2.0”, “app de folha de pagamento”, etc.

Uma vez que os apps foram criados e houver a decisão de mudança de template “base”, essa mudança pode ser propagada para cada app, na medida em que o template “base” foi bem configurado para ser aproveitado/estendido (extend) pelos “apps herdeiros”.

Entretanto, para que o arquivo index.html do template Bootstrap “SB Admin 2” (agora base.html) seja adaptado para ser usado como template do Django, deve-se proceder às alterações seguintes.

1) Acrescentar a linha abaixo, no topo do código html:

{% load static %}

Esse código permite que o template busque recursos estáticos da página gerada no caminho /root/PycharmProjects/MeuProjeto/static.

2) Em cada conteúdo estático, acrescentar o código {% static ‘…’ %}

Por exemplo, alterar de:

href="vendor/fontawesome-free/css/all.min.css"

para:

href="{% static 'vendor/fontawesome-free/css/all.min.css' %}"

Abaixo, listo as entradas a serem alteradas:

link href="{% static 'vendor/fontawesome-free/css/all.min.css' %}"
link href="{% static 'css/sb-admin-2.min.css' %}"
img class="img-fluid px-3 px-sm-4 mt-3 mb-4" style="width: 25rem;" src="{% static 'img/undraw_posting_photo.svg' %}"
script src="{% static 'vendor/jquery/jquery.min.js' %}"
script src="{% static 'vendor/bootstrap/js/bootstrap.bundle.min.js' %}"
script src="{% static 'vendor/jquery-easing/jquery.easing.min.js' %}"
script src="{% static 'js/sb-admin-2.min.js' %}"
script src="{% static 'vendor/chart.js/Chart.min.js' %}"
script src="{% static 'js/demo/chart-area-demo.js' %}"
script src="{% static 'js/demo/chart-pie-demo.js' %}"

3) (Opcional) Incluir um ícone para o site (favicon)

Acrescentar após a tag <title></title>:

<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>

Lembrando-se de acrescentar o arquivo favicon.ico no diretório static, posteriormente.

4) Em cada conteúdo que será definido nos herdeiros, acrescentar as tags {% block variable_name %}{% endblock %}

Neste artigo, vamos definir três áreas a serem definidas pelos herdeiros:

  1. Título da página (no navegador de Internet)
  2. Título da barra lateral
  3. Usuário logado
Acima é destacados os elementos 2 e 3 a serem alterados neste passo

4.1) Título do navegador de Internet – title

Este título é alterado pela tag <title></title>:

<title>{% block title %}{% endblock %}</title>

4.2) Título da barra lateral – sidebar_title

Existe uma tag <div></div> que altera este conteúdo:

<div class="sidebar-brand-text mx-3">{% block sidebar_title %}{% endblock %}</div>

4.3) Usuário logado – user_name e user_photo

Existe uma tag <span></span> e <img> que altera o nome do usuário (user_name) e a foto do perfil (user_photo), respectivamente:

<span class="mr-2 d-none d-lg-inline text-gray-600 small">{% block user_name %}{% endblock %}</span>
<img class="img-profile rounded-circle" src="{% block user_photo %}{% endblock %}">

Criar o arquivo app.html

Este arquivo é o template herdado de base.html que será responsável pelo front-end da aplicação “app”.

Segue abaixo o conteúdo do arquivo app.html:

{% extends "base.html" %}
{% block title %}App²{% endblock %}
{% block sidebar_title %}App<sup>2</sup>{% endblock %}
{% block user_name %}Lucas{% endblock %}
{% block user_photo %}https://images.unsplash.com/photo-1534308143481-c55f00be8bd7?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&dl=ashton-bingham-EQFtEzJGERg-unsplash.jpg&w=640{% endblock %}

Cada block definido no item 4 está preenchido com valores pelo herdeiro app.html. É possível editar esses valores via programação, mas não é o escopo deste artigo.

Resultado

Resultado das alterações de index.html do template inicial de “SB Admin 2” para o template app.html herdado do template base.html

Django, Python, Bootstrap são marcas registradas.

unsplash-logoAshton Bingham – photo credits

Programação web com Python – Instalação

Ao criar páginas web dinâmicas com Django 3.0.5 e Python 3.6, optei por hospedar no pythonanywhere.

Como ambiente de desenvolvimento, estou usando o PyCharm Community 2020.1 como editor no CentOS 8 dentro de uma máquina virtual emulada em Oracle VirtualBox 6.0.14, usando um HD virtual de 50 GB, 2GB de RAM e 2 CPUs, ou seja, esta é a “guest machine”.

A configuração do PC, que hospeda a máquina de desenvolvimento, “host machine” é: 480 GB SSD, 1 TB HD, 16 GB de RAM e Intel Core i5 (5ª Geração).

Segue abaixo o passo a passo.

Alguns macetes para configuração do CentOS 8

Após criar a máquina virtual, crie as interfaces de rede:

  • NAT
  • Host-Only

Após o primeiro boot do CentOS já instalado na “guest machine”, habilite as interfaces de rede e faça os testes de acesso à Internet (por meio da placa NAT) e de ping para a “host machine” (por meio da Host-Only).

Se sua “host” for Windows, o ping pode ser bloqueado pelo Firewall do Windows, sendo necessário ativar o IP do “guest” ou range de IPs da rede Host-Only do VirtualBox para o protocolo ICMP.

Digite os passos abaixo para instalação dos pacotes necessários ao Virtualbox Guest Additions (similar ao VMWare Tools):

# yum update
# yum install gcc make kernel-devel
# yum install elfutils-libelf-devel

O pacote elfutils-libelf-devel foi sugerido pela instalação do Virtualbox Guest Additions, após uma tentativa com erro. Verifiquei a log em /var/log/vboxadd-setup.log

Após o boot, acessar o menu do VirtualBox, menu “Dispositivos” > “Inserir imagem de CD dos Adicionais para o convidado”.

Após isso, não ocorrendo erros, a integração do ponteiro do Mouse deve funcionar. Aproveite para configurar “Dispositivos” > “Área de Transferência Compartilhada…” > “Bi-direcional”, para que o que é copiado dentro da “guest” seja possível de ser colado na “host” e vice-versa.

Instalando o pyCharm Community Edition

Baixe diretamente na “guest” a partir da URL do pyCharm Community 2020.1 (obs. pode haver versões posteriores):

# cd /root
# wget https://download.jetbrains.com/python/pycharm-community-2020.1.tar.gz
# cd /usr/bin
# tar -xvf /root/pycharm-community-2020.1.tar.gz
# ln -s /usr/bin/pycharm-community-2020.1/bin/pycharm.sh /usr/bin/pycharm

Para executar o pyCharm, basta abrir um terminal e digitar pycharm.

Instalando o Django

O django deve ser instalado após o Python 3.x, que deve ter sido instalado na etapa “Alguns macetes para configuração do CentOS 8” no comando “yum update”.

Para checar se o Python 3.x está instalado, verificar pelo comando:

# yum install python3

Instalar o Django 3.0.5 por meio do comando pip3 (obs. pode haver versão posterior):

# pip3 install django==3.0.5

Criando o primeiro projeto Django

O pyCharm costuma criar seus projetos na home do usuário ativo, neste caso, /root, mais especificamente no diretório PycharmProjects.

Sendo assim, o diretório do projeto é: /root/PycharmProjects/MeuProjeto

Após criar um projeto novo no pyCharm, optei por criar o projeto Django dentro do diretório acima, mas esse tipo de decisão é livre do desenvolvedor:

# cd /root/PycharmProjects/MeuProjeto
# django-admin startproject MeuProjeto
# tree MeuProjeto
MeuProjeto
├── manage.py
└── pyProject
    ├── asgi.py
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
1 directory, 6 files

Deploy da aplicação web Django

No Terminal, para rodar a aplicação Django, digitar:

# cd /root/PycharmProjects/MeuProjeto/MeuProjeto
# python manage.py runserver 0.0.0.0:8000

Rodar a aplicação web por meio do navegador na “guest” ou na “host”.

Na “guest”, a URL é: http://localhost:8000/

Página default ou “Hello World”, sem aplicação configurada

Em outros artigos, vamos criar aplicações neste template MeuProjeto.

As marcas Windows, Python, Django, pyCharm, Oracle VirtualBox, VMWare, CentOS e pythonanywhere são registradas.

Modelagem 3D de mapa isométrico (2D) no Blender para uso em jogos

Para esta modelagem, vou usar o editor 3D Blender(R) versão 2.82a para criar um mapa em duas dimensões que simule um mapa de três dimensões, no estilo de jogo Microsoft Age of Empires(R) ou similares.

Um pouco sobre projeção isométrica

Um objeto em 3D (ex. cubo) ao ser projetado num espaço 2D (ex. tela do celular ou tela do computador), sofrerá com distorção de ângulos entre as arestas da projeção, enquanto os três eixos (X, Y e Z) se mantêm com o tamanho igual ao objeto 3D original, como exemplificado abaixo na projeção isométrica:

Cubo em Projeção Isométrica
(Créditos da imagem: Christophe Dang Ngoc Chan, Mike Horvath)

No mundo 3D, os eixos X, Y e Z possuem 90 graus de ângulo entre si. Na projeção, o custo de se manter os lados do cubo iguais é pago com a diferença nos ângulos. Os eixos X e Y (mesmo plano – face superior), possuem 120 graus de ângulo entre si. Da mesma forma, os eixos X e Z ou Y e Z possuem 120 graus também.

No Blender, usa-se o nome de Ortográfica (Ortographic), o que não altera o resultado, pois a projeção isométrica é um subtipo da ortográfica.

Mercedes-Benz Sprinter Car Mercedes-Benz S-Class Mercedes-Benz A ...
Os eixos X, Y, Z lembram o ângulo de 120 graus do logo da empresa Mercedes-Benz (R), no qual, cada raia da estrela possui o mesmo comprimento.

Criando os tiles em projeção isométrica no Blender 2.82a

1) Preparar o ambiente do Blender para projeção isométrica

Ao criar um novo arquivo no Blender, clicar sobre a luz (light) da cena (scene) e alterar para a luz do Sol (Sun), bem como alterar a força (Strength) para 1.

Luz para Sol e Força 1

Alterar a câmera para ortográfica (ortographic):

Alterar o tipo para ortográfica (Ortographic)

Depois, alterar os parâmetros de rotação da câmera:

Parâmetros de rotação nos eixos X, Y e Z da câmera

Alterar o tamanho das dimensões da imagem final renderizada (resoluções X e Y em pixels):

Alterar o parâmetro de Resolution X e Y, conforme for conveniente

Alterar o fundo do render para Transparente (transparent):

Na seção Film, ticar a opção Transparent

2) Mão na massa: desenhando o cubo-base

No cubo inicial, apliquei o fator de escala (atalho tecla S) para 0.2.

Depois, fiz algumas alterações de escala (S) deixando fixo por eixo (S+X, S+Y, S+Z), movimentando (atalho G) adequadamente para caber num render de tamanho 64 x 64 px (pixels).

Resultado fora de escala na perspectiva da câmera

Realizando o render para verificar como estamos saindo, fica assim:

Imagem renderizada de 64 x 64 pixels

3) Alterando a altura do cubo no Editor de imagens

Recomendo o uso do GIMP para movimentar o objeto alguns pixels no eixo Z (acima) a cada exportação para arquivo PNG.

No meu caso, a imagem renderizada pelo Blender foi Cube.png, seguido por Cube2.png e Cube3.png:

Arquivos que serão base para o mapa no editor Tiled

4) Criando o mapa no Editor Tiled

Ao criar o novo mapa (CubeMap.tmx), informar os parâmetros abaixo:

Orientação Isométrica e largura do Tile = 64 px e Altura = 32 px (metade)

Criar um novo tileset como uma coleção de imagens:

Novo tileset Cubes

Incluir as imagens geradas no passo 3) no Tileset – Cubes.tsx gerado acima.

Caso seja necessário repetir o passo 3) novamente, gerando novos arquivos CubeX.png, onde X = 1, 2, … N, é possível atualizar as imagens do mapa (CubeMap.tmx) e do tileset (Cubes.tsx), ao teclar CTRL+T no mapa.

5) Resultado

Segue abaixo o mapa que fiz a partir dos passos acima:

Mapa com degraus correspondentes aos deslocamentos efetuados na imagem original

Observações importantes!

Para que as peças (tiles) do mapa se encaixem corretamente, é importante não deixar espaços vazios na horizontal e prover o encaixe das peças na mesma altura.

O efeito de alturas diferentes, proporcionou a escada no mapa, conforme é possível verificar no item 4) Resultado.

Outro ponto importante é manter o eixo Z e o vértice oposto ao eixo na mesma linha, conforme assinalado abaixo:

Preenchimento horizontal e alinhamento vertical são necessários para obter o encaixe das peças do mapa

Como ficaria no Cocos2d?

O código no Cocos2d não possui alteração, porque o mapa editado pelo Tiled é lido dos arquivos envolvidos (TMX, TSX e PNG) como se fosse um mapa 2D feito em outro artigo.

Portanto, convenientemente o Cocos2d projeta conforme foi gravado no Mapa.TMX no jogo.

Problemas de compatibilidade entre o Tiled Editor e o Cocos2d

Tive problemas ao mostrar o mapa gerado no Tiled Editor versão 1.1.6 e Cocos2d-x 4.0.

Passo 1) Juntar as imagens horizontalmente

Ocorre que o mapa estava com as imagens separadas em Cube.png, Cube2.png e Cube3.png. Apenas o Cube3.png aparecia preenchido nos espaços que já havia posicionado.

Para solucionar, tive que juntá-las horizontalmente, resultando em uma imagem com 64 x 192 pixels.

OBS.: pintei de cores diferentes antes para detectar as partes da imagem

Imagem Cubes.png – 64 x 192 px (192 = 64 x 3)

Passo 2) Gerar um Tileset a partir dessa única imagem

No menu Tiled, clicar em “Novo” > “Tileset…”, selecionando as seguintes opções:

Selecionar a opção “Baseado numa Imagem Tileset”

Resultado no Cocos2d

As marcas Tiled, Blender, Mercedes-Benz, Microsoft e Age of Empires são registradas.

Como implementar um Mapa Ortogonal (2D) no jogo em Cocos2d

Criar um mapa no jogo em Cocos2D é fácil através do Tiled Map Editor.

A versão utilizada do Cocos2d-x é a 4.0.

Com ele é possível fazer mapas através da colocação de tiles (do inglês, azulejos) um ao lado do outro (horizontal) e em camadas (vertical, ou seja, com sobreposição).

Criando o seu mapa

Após baixar e instalar o Tiled versão 0.18.2 ou anterior no link do SourceForge, crie o seu primeiro mapa com as seguintes configurações:

Em pesquisa em fóruns da Internet, o formato da camada do tile – “Base64 (comprimido com zlib)” – permite armazenar as figuras usadas no mapa, sem a necessidade de copiar os arquivos de origem delas.

Após a criação do mapa, na seção “Camadas”, ajuste o nome da camada para, conforme segue:

Se for escrever outro nome aqui, altere depois no código

Na seção “Terrenos”, insira o seu primeiro tile, clicando em “Novo Tileset”:

Depois de escolher uma imagem, clicar nela e, após, clicar nos quadriculados do mapa pra preenchê-lo:

Salvar como MeuJogo.tmx

Copiar o arquivo MeuJogo.tmx para o diretório DIRETÓRIO_DO_PROJETO\Resources

Na solução MeuJogo.sln do artigo anterior, alterar o código, conforme segue:

Arquivo HelloWorld.h

#include "cocos2d.h"
#include "2d/CCTMXTiledMap.h"
#include "2d/CCTMXLayer.h"

using namespace cocos2d;

class HelloWorld : public Scene
{
private:
    TMXTiledMap *_tileMap;
    TMXLayer *_background;
...

Arquivo HelloWorld.cpp

bool HelloWorld::init()
{
    _tileMap = new TMXTiledMap();
    _tileMap->initWithTMXFile("MeuJogo.tmx");
    _background = _tileMap->getLayer("Background"); // mesmo nome que colocou em "Camadas" no editor "Tiled"
    this->addChild(_tileMap, 0);
    return true;
}

O próximo artigo será sobre criar um mapa em duas dimensões Isométrico no estilo do jogo Age of Empires(R) ou jogos do gênero.

As marcas Tiled Editor, Microsoft, Age of Empires e Cocos2D são registradas

Passo a passo: Reset do Dell SonicWall TZ 205

Como configurar o SonicWall TZ 205 Wireless N, utilizando o reset de fábrica e desabilitando HTTPS da interface web, através da linha de comando.

Primeira ressalva: não é necessário usar a interface “Console”

A interface de rede “Console” raramente será usada nos dias de hoje. Isso porque deve ser conectada a uma interface DB9 no PC/laptop numa ponta do cabo de rede e, na interface “Console” do tipo RJ-45.

Cabo de rede CAT.5e.

O procedimento para confecção do cabo encontra-se no site oficial da Dell SonicWall – https://www.sonicwall.com/support/knowledge-base/how-do-i-make-a-console-cable-for-sonicwall-firewall-appliances/170505608988182/

Image
Disposição das ligações do cabo de rede nas pontas RJ-45 e DB9.

Usando a interface X0

Ao usar a interface X0, configurar a placa de rede no PC/laptop como “Obter IP automaticamente da rede” (Microsoft Windows 7+).

Após conectar o cabo de rede, verificar o endereço de rede que subir na interface da placa, por meio do comando ipconfig ou similar (ifconfig). Ex. 10.1.130.23.

Saída do comando ipconfig (Windows).

Executando o SonicWall TZ 205 em Modo de Segurança (Safe Mode)

Reset de Fábrica

Existe um pino redondo ao lado da entrada de energia que pode ser ativado por meio de um clipe de papel para efetuar o reset das configurações de fábrica do SonicWall.

O pino redondo está dentro da abertura sinalizada acima com uma seta.

Após pressionar o botão por 5 a 10 segundos, o LED frontal sobre o ícone de chave de rosca ficará piscando na cor laranja.

Dessa forma, proceder à configuração da placa de rede do PC/laptop para IP fixo manualmente 192.168.168.1 e máscara de rede 255.255.255.0.

Acessar no navegador de Internet o endereço http://192.168.168.168/

Modo de Segurança do TZ 205.

Em Firmware Management, clicar no ícone da coluna “Boot“:

Reset (Boot) para as Configurações de Fábrica.

Após o reset acima, o LED laranja se apaga e acende o LED azul sobre o ícone de energia (power on). Isto sinaliza que a configuração foi realizada com sucesso.

LED azul sobre o ícone de energia (power on), ao lado do ícone de chave de rosca, bem como a interface X0 acesa (LED ligado).

No PC/laptop, ativar a detecção automática do endereço IP nas configurações de placa de rede.

Problemas ao acessar a configuração web do SonicWall TZ 205 (versão SSL ou cifra fraca)

Se ocorrer um dos erros abaixo referente à segurança do acesso HTTPS à interface web do SonicWall:

Erro de versão SSL.
Erro de cifra fraca.

É possível desabilitar o acesso via HTTPS.
Este work-around não é recomendado se o acesso for feito em rede corporativa ou em rede pública.

É possível fazer isso pela interface CLI do SonicWall.

Para realizar o acesso à CLI (Command Line Interface) Interface de Linha de Comando, basta conectar-se via SSH, utilizando usuário e senha definidos previamente ou usuário “admin” e senha “password” no caso de obter as configurações padrão de fábrica.

Digitar “configure” <enter>, depois digitar “show administration” <enter> para verificar as configurações ativas e digitar “administration” <enter> para entrar no modo de configuração administrativa:

admin@C0XXXXXXXXXX> configure
config(C0XXXXXXXXXX)# show administration
administration
firewall-name C0XXXXXXXXXX
no auto-append-suffix
admin-name admin
no password aging
no password uniqueness
no password enforce-4-character-difference
password minimum-length 1
no password complexity
password constraints-apply-to builtin-admin
password constraints-apply-to full-admins
password constraints-apply-to limited-admins
password constraints-apply-to local-users
idle-logout-time 5
no user-lockout
admin-preempt-action goto-non-config
admin-preempt-inactivity-timeout 10
no inter-admin-messaging
no web-management allow-http
web-management https-port 443
web-management certificate use-self-signed
no web-management client-certificate-check
web-management cert-common-name 192.168.168.168
web-management default-table-size 50
web-management refresh-interval 10
no dashboard-as-starting-page
web-management tooltip form-delay 2000 button-delay 3000 text-delay 500
no override-sonicpointn-download
no override-sonicpointnv-download
no override-sonicpointndr-download
language-override english
no gms-management
ssh port 22
exit
config(C0XXXXXXXXXX)# administration

Permitir que a configuração da interface web seja feita ao digitar “web-management allow-http” <enter>. Depois, digitar “commit” <enter> para gravar as configurações.

Opcional: verificar a alteração realizada, por meio do comando “show administration”:

(config-administration)# web-management allow-http
(config-administration)# commit
% Applying changes…
% Changes made.
(config-administration)# exit
config(C0XXXXXXXXXXX)# show administration
administration
firewall-name C0XXXXXXXXXX
no auto-append-suffix
admin-name admin
no password aging
no password uniqueness
no password enforce-4-character-difference
password minimum-length 1
no password complexity
password constraints-apply-to builtin-admin
password constraints-apply-to full-admins
password constraints-apply-to limited-admins
password constraints-apply-to local-users
idle-logout-time 5
no user-lockout
admin-preempt-action goto-non-config
admin-preempt-inactivity-timeout 10
no inter-admin-messaging
web-management allow-http
web-management http-port 80
web-management certificate use-self-signed
no web-management client-certificate-check
web-management cert-common-name 192.168.168.168
web-management default-table-size 50
web-management refresh-interval 10
no dashboard-as-starting-page
web-management tooltip form-delay 2000 button-delay 3000 text-delay 500
no override-sonicpointn-download
no override-sonicpointnv-download
no override-sonicpointndr-download
language-override english
no gms-management
web-management https-port 443
ssh port 22
exit

Por fim, permitir o acesso HTTP e sem redirecionamento HTTPS na interface X0 por meio dos comandos abaixo:

config(C0XXXXXXXXXX)# interface X0
(edit-interface[X0])# no https-redirect
(edit-interface[X0])# management http
(edit-interface[X0])# commit
% Applying changes…
% Changes made.

Acesso à interface Web

Verificar na página abaixo que o acesso foi habilitado para ser realizado via HTTP (“Não seguro”).

Acesso à interface web de configuração do TZ 205

As marcas Microsoft, Windows, SonicWall, TZ 205 são registradas.

Como usar o Cocos2d com Visual Studio no Windows 10

Cocos é um framework de desenvolvimento de jogos, apps e outros programas interativos baseados em GUI (linguagem visual) multiplataforma de jogos para celulares com iOS e Android, podendo ser instalado em conjunto com diversas IDEs.

As linguagens de programação usadas no Cocos, dependendo do tipo de framework usado são: C++, C#, Obj-C, Python, Lua, JS e Swift.
Neste caso, vamos empregar o Cocos2d-x, escolher a IDE Microsoft Visual Studio 2019 e a linguagem C++, Lua, JavaScript.

O Cocos2d-x pode escrever programas para as plataformas iOS, Android, Tizen, Windows 8, Windows Phone 8, Linux e Mac OS X.

Ferramentas a serem instaladas

Para cumprir o escopo Visual Studio + Cocos2d, devemos:

  1. Baixar e instalar o Visual Studio Community, o mais recente até a edição deste post é o 2019;
  2. Baixar e instalar o Python 2.7.x (apesar de mais antiga, a versão 2.7.x é compatível com o script cocos2d, como veremos a seguir);
  3. Baixar e descompactar o cocos2d-x (versão 4.0, ou mais recente);
  4. Baixar e descompactar o Android NDK;
  5. Baixar e descompactar o ADT (Android Developer Tools);
  6. Baixar e instalar o CMake (versão 3.17.0, ou mais recente), marcando a opção de configurar para incluir o cmake na variável PATH, para todos os usuários.

Executar os passos 1 a 6.

Abrindo o Prompt de Comando (ou Command Prompt, em inglês) do Windows 10, entrar no diretório no qual o Cocos2d-x foi descompactado (ex. F:\Mobile\cocos2d-x-4.0) e executar o comando:

python setup.py

Estrutura inicial dos arquivos Cocos

Com este comando, você configurará as variáveis ambiente do Cocos – NDK_ROOT e ANDROID_SDK_ROOT:

Após fechar e abrir o Command Prompt do Windows, é chegada a hora de criar a estrutura inicial dos arquivos em Cocos:

cocos new MeuJogo -p com.jogos.MeuJogo -l cpp -d F:\Mobile\MeuJogo

A estrutura final dos arquivos e diretórios criados, exceto pelo diretório proj.visualstudio, segue abaixo:

Adaptando o projeto para ser editado e compilado em Visual Studio

Para configurar uma solução Visual Studio (arquivo. SLN), é necessário configurar os arquivos da solução. Vamos criar o diretório proj.visualstudio e executar o CMake:

mkdir proj.visualstudio && cd proj.visualstudio
cmake .. -G"Visual Studio 16 2019"

O arquivo MeuJogo.sln deve constar do diretório: F:\Mobile\MeuJogo\MeuJogo\proj.visualstudio

Após abrir a solução MeuJogo.sln no Visual Studio, deve-se configurar o projeto MeuJogo como Projeto de Inicialização (ou StartUp Project, em inglês):

Agora é rodar o MeuJogo:

Resultado:

Chegamos ao fim, no próximo post, aprenderemos como fazer um mapa tiled para criar mapas 2d em jogos no estilo arcade/RPG (ex. Zelda).

As marcas Zelda, Cocos2d, Microsoft, CMake, Python e Android são registradas

License Info Grabber (programa à venda)

Coletor de informações sobre licenças do EMC(R) Networker a partir de servidores de backup, trazendo o nome da licença (License Name), Data de expiração (Expiration Date) e o código de ativação (Enabler Code) de cada licença do parque, possibilitando guardar as informações delas para restaurar ambientes futuros.

Escrito em Java, é compatível com MS-Windows e Linux (32 ou 64 bits).

No caso de licença permanente aparece o texto “Authorized – No expiration date”.

Não está disponível para download, mas pode ser vendido no formato compilado ou o código aberto, com o pagamento de uma quantia simbólica.

Havendo interesse, favor entrar em contato por meio dos comentários deste artigo.

EMC, Networker, MS, Windows – são marcas registradas