Unity 5+ Cuidado ao Comparar Pontos Flutuantes :(

Standard

Spoilers: comparar 2 pontos flutuantes diretamente com ==, >, <, etc. não é legal!

Por questões de hardware, o computador sempre carrega algum erro em operações de ponto flutuante (que é mais notado quanto mais vc vai fazendo operações em cima do valor de ponto flutuante). Isso é chamado de erro de mantissa, que vocês podem procurar mais em livros de calculo numérico, ou em links como esse:
http://producao.virtual.ufpb.br/…/livro.chunked/ch03s07.html

Por isso é uma boa prática de programação quando comparar valores de ponto flutuante usar um patamar de erro (ou threshold) que a gente chama normalmente de epsilon. Esse valor vai ser a precisão que você quer na operação, e vai variar de acordo com a necessidade do seu código. Por isso que eu e mais alguns sugerimos usar:
|A-B| > epsilon, ou A-B > epsilon

Pode parecer óbvio que A > B funcionaria, mas para alguns casos não, e daria errado. Esse link que o Fernand Rossa divulgou fala de um jeito mais resumido:
https://msdn.microsoft.com/en-us/library/c151dt3s.aspx
Mas vcs podem ver um exemplo nesse link, também da documentação do C#, do porque pode dar errado:
https://msdn.microsoft.com/…/library/ya2zha7s(v=vs.110).aspx

É um problema muito importante para computação que necessita de precisão muito grande de resultados, como problemas de engenharia. Mas geralmente na área de jogos ele acaba não sendo tão relevante, e por isso muita gente acaba não sabendo disso.

Informativo de Leonardo Pereira: https://www.facebook.com/ltorpereira?hc_ref=ARS69EpNMLAV9EGZCS35pTwcmLiYwNg2Xou5_U06NEfek6oEchdWO94nHbQYJffYMzc
No post: https://www.facebook.com/groups/unity3dbr/permalink/1780010805351473/
No fórum da Unity Brasil: https://www.facebook.com/groups/unity3dbr/?hc_ref=ARS69EpNMLAV9EGZCS35pTwcmLiYwNg2Xou5_U06NEfek6oEchdWO94nHbQYJffYMzc

Dicas de Otimização da Unity (Optimize Apps powered by Unity) para mobile part 1

Standard

Bom, não vou delongar o texto aqui e tampouco encher linguiça com blá blá blá, como dev quer mesmo a parte de código ou de qualquer coisa adicional já irei postando logo abaixo. Antes que você se apresse esse é um pequeno post que coloca em prática algumas coisas que tenho aprendido em cima de Unity (e é bem passageiro, e o foco é 100% em mobile ( e games que deveriam rodar em pcs MUITO velhos ), logo podemos chamar esse post de part 1 🙂  :

1 – Tu quer mesmo usar NavMesh?

Pense e repense antes de usar, Waypoints podem ser uma alternativa muito mais leve dependendo do que você tem planejado,

Por mais que você deixe as coisas otmizadassas no navmesh o uso deles (bake e bla bla bla não colam, é pesadinho o danado!) pesa em plataformas mobile, então repense sem que for usar!

2 – Quer resolução de 10000k em um smartphone? SAI FORA!

Uma das coisas mais estranhas que o mundo mobile tem é isto, se você reduz a resolução do que você quer exibir controlando o canvas o resultado é um ganho de performance do tamanho do planeta terra (SIM, ISSO PROCEDE)!

3 – “Tudo em uma scene gigante”! SAI FORA!

Uma das coisas mais simples de se fazer para se ter ganho é ter várias scenes para uma scene gigante, é bem melhor deixar o player tendo em vista um “LOADING” que deixa tudo muito leve depois a não ter nada e muitíssimos objetos na ram escassa do device comendo tudo do device!

4 – Um bonus …

Um link muito interessante é o que vou postar abaixo, veja o link com carinho, valerá a pena :).
https://forum.unity.com/threads/unity-5-android-performance-tips.437695/

 

 

Como exibir a pasta Library do seu Home no Mac Os X Lion

Standard

E não é que a danada da Apple sumiu com a pasta library do home user?
Essa dica é simples e vale para ambientes Mac Os X Lion (Hackintosh incluso) 10.7.x.

Existem 2 formas de exibir a pasta, só que, uma é monótona, outra já é mais hard, porém resolve de imediato.

Faça o seguinte, abra o terminal do seu Lion, conforme imagem abaixo:

abrir terminal UNIX no mac

abrir terminal UNIX no mac

Pronto, assim que o terminal for aberto digite:

chflags nohidden ~/Library

 

Pronto! Deve estar acessível a pasta Library para você sem qualquer gambiarra.

Você pode abrir pelo finder, digitando ~/Library/, mas não é mais simples remover a ocultação da pasta?

 

Abraços galera e bons estudos/trabalhos para vocês.

AppUnix (Top Unix-Like Site)

Como observar quem está acessando o roundcube no cpanel?

Standard

Para identificar quem está acessando seu roundcube use:

egrep "GET (/cpsess[0-9]+)?/3rdparty/roundcube/\?.* HTTP/1.[01]" /usr/local/cpanel/logs/access_log

Para saber quais são os ips que estão acessando o roundcube:

pgrep -l -f webmaild

Para saber qual versão do roundcube:

grep -H '' /usr/local/cpanel/version /var/cpanel/roundcube/version


egrep "GET (/cpsess[0-9]+)?/3rdparty/roundcube/\?.* HTTP/1.[01]" /usr/local/cpanel/logs/access_log

Como remover caracteres ^M de arquivos usando VIM/VI (vale para qualquer UNIX-like)

Standard

Bom, galera, quem aqui nunca abriu um arquivo no console que apresentou caracteres ^M?
Normalmente essas pragas aparecem ou com o Dreamweaver ou com Word (cópia) – Área de Transferência, depois os caras costumam enviar por ftp e daí já sabe né? Se abrir o arquivo via console tá lá a praga!

Bem, a dica que nós do AppUnix vamos dar é simples, porém eficaz.

Abrindo seu vi/vim (no exemplo abaixo iremos dar o nome do arquivo como sendo crash.php):

vim crash.php

Assim que o arquivo for aberto o vi/vim estará em modo de comando, para ativar execuções aperte “:” (literalmente os 2 pontos SEM ASPAS) e digite o seginte %s/ (percentual, depois, s e depois / )  e em seguida aperte CTRL+V e CTRL+M e por fim digite //g

Na linha de execução do vi/vim vai aparecer literalmente isso aqui abaixo:

:%s/^M//g

Apertamdo ENTER ele vai remover toda a praga dos caracteres ^M.

Curtiu?
SHARE NELE!

Abraços galera.

Usando o comando screen

Standard

Antes de começar, eu vou informar a vocês o que podemos fazer usando o comando screen.

Como um linux sysadmin, é muito comum você ter a necessidade de rodar vários comandos de uma vez. Você provavelmente irá abrir várias sessões do ssh para isto, porém, existe uma maneira melhor, mais segura e recomendada.

Outra necessidade que frequentemente irá surgir, é rodar um comando ou script que levará horas para terminar, como por exemplo um rsync. Isto requer que vocÊ mantenha a conexão aberta no ssh, pois se você fechar, o script ou comando também se encerrará, o que pode ser um problema se você tiver a sua conexão a internet interrompida.

Face a estes problemas, podemos começar a apresentar a vocês o comando screen.

Screen – torna possível rodar vários pseudo terminais, manipular e salvar suas entradas e saídas no screen, além de copiar e colar entre as janelas.

Vou mostar como rodar um comando que leva horas, dentro de um screen.

Vamos primeiramente instalar o screen, usando yun, apt-get, ou algum gerenciador de pacotes que você tiver disponível. Em nosso exemplo usaremos o yum.

yum install screen

Agora digite:

screen

Este comando iniciará uma nova janela dentro do screen para você. Você tem também a opção de iniciar o comando dando um nome a janela (parametro -S). Exemplo:

screen -S janela1

Neste caso, a janela se chamará “janela1″.

O screen funciona como qualquer outra sessão dentro do ssh. Você pode digitar qualquer comando agora, que irá rodar normalmente.

Se você quiser sair da sessão do screen, deixando-a ativa, e manter o comando que estava sendo executado, faça:

Ctrl-a d (pressione control +a, solte, e em seguida aperte d)

Então, quando você quiser voltar a janela screen, digite:

screen -r

Outras opções que você tem quando está dentro do screen são:

1. Para criar uma nova sessão:

Ctrl-a c

2. Para alterar entre as sessões:

Ctrl-a n

Existem outras possiblidades de uso. Para maiores informações e ajuda, você pode utilizar no seu terminal:

man screen

fonte: http://www.servidorgerenciado.com.br/usando-o-comando-screen/

Comandos para análise de dispositivos (placa-mãe, processador e etc) no LINUX

Standard

 

Tá, isso aí é dúvida de muuuuuuita gente, mas é algo simples, um dia foi minha, mas decidimos fazer um “packzinho” de comandos que quebram o galho quando o assunto é detalhamento de Hardware. Imagine-se a 4 mil km de distância de seu server (Normal quando se loca server no exterior), como faremos para saber o que de fato está rodando? No caso do DMIDECODE, ele detalha até se o camarada colocou alguma paravirtualização (vmware, por exemplo).
As vezes precisamos fazer perícias para saber se uma aplicação/daemon será compatível com nossa estrutura de dispositivos (arquitetura, fsb, chipset e etc), e para isto precisamos de informações beeeeem detalhadas.
Abaixo descrevo alguns comandos que acho bacana:

lspci
Este comando lhe dá um detalhe bem legal sobre dispositivos pci em seu pc.
Em um pc simples a saída fica mais ou menos assim:

00:00.0 Host bridge: VIA Technologies, Inc. P4M800 Host Bridge
00:00.1 Host bridge: VIA Technologies, Inc. P4M800 Host Bridge
00:00.2 Host bridge: VIA Technologies, Inc. P4M800 Host Bridge
00:00.3 Host bridge: VIA Technologies, Inc. P4M800 Host Bridge
00:00.4 Host bridge: VIA Technologies, Inc. P4M800 Host Bridge
00:00.7 Host bridge: VIA Technologies, Inc. P4M800 Host Bridge
00:01.0 PCI bridge: VIA Technologies, Inc. VT8237/VX700 PCI Bridge
00:0f.0 RAID bus controller: VIA Technologies, Inc. VIA VT6420 SATA RAID Controller (rev 80)
00:0f.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06)
00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81)
00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81)
00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81)
00:10.3 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 81)
00:10.4 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 86)
00:11.0 ISA bridge: VIA Technologies, Inc. VT8237 ISA bridge [KT600/K8T800/K8T890 South]
00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller (rev 60)
00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 78)
01:00.0 VGA compatible controller: VIA Technologies, Inc. KM400/KN400/P4M800 [S3 UniChrome] (rev 01)

Para informações beeem detalhadas use lspci -vv
(use os camandos como root).

lshw
Este comando é muito amigável e lhe dá um resumo bem bombado sobre seu hardware (memória, cpu e etc).
Em alguns casos ele consegue informar a frequência da memória (isto mesmo, ddr 1066 por exemplo).
Esse comando (na minha opinião) deve ser usado da seguinte forma:

lshw | more

O pipe “|” + more serve para paginar a saída de maneira que você possa ver pausadamente.

A saída deste comando é beeem legal, veja um pedacinho da saída falando de memória:

*-memory:0
description: System Memory
physical id: 40
slot: System board or motherboard
size: 4GiB
*-bank:0
description: DIMM 667 MHz (1.5 ns)
product: None
vendor: None
physical id: 0
serial: None
slot: DIMM_B1
size: 2GiB
width: 64 bits
clock: 667MHz (1.5ns)

 

Legal né?

Arquivo cpuinfo
Essa é uma das formas mais simples de saber que flags seu processador tem, qual velocidade dele, memória cache (L1, L2…) e etc.
Use da seguinte forma:

cat /proc/cpuinfo
A saída deste comando deve sair parecida com esta:

processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) 4 CPU 3.40GHz
stepping : 10
cpu MHz : 3400.425
cache size : 2048 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc up pni monitor ds_cpl est cid cx16 xtpr lahf_lm
bogomips : 6805.08

Legal!

arquivo devices
Esse é um meio muito resumido e particularmente não gosto muito, mas segue a dica:
cat /proc/devices

Mostra os dispositivos resumidamente (no estilo lsmod).

Arquivo meminfo
Este arquivo lhe informa memória com um pouco mais de detalhes:
cat /proc/meminfo

Comando dmesg

Esse comando é muito legal, precisa somente de um extrinha:


use-o com o more!

dmesg | more

Normalmente a saída é enorme.

O comando dmesg dá um resumo do startup do sistema operacional lgnu/linux, assim como detalha em um rápido processo as coisas boas e ruins que estão ocorrendo com o sistema. (MUITO ÚTIL).


Erros de boot, erros de kernel, dispositivos desconhecidos e etc!

dmidecode

O comando dmidecode é um monstro. Esse comando dá todos os detalhes de hardware (isto mesmo, informe até o modelo da placa-mãe).

 

Utilize-o da seguinte forma:

dmidecode | more

Um pouco da saída:

System Information
Manufacturer: MICRO-STAR INTERNATIONAL CO., LTD
Product Name: MS-7071
Version: 1.00
Serial Number:
UUID: Not Present

Wake-up Type: Power Switch

Esse comando é uma mãe! Isto mesmo, muito bom para saber as informações detalhadas de uma motherboard, sem contar que você pode colher as informações de chipset e modelo da placa-mãe, podendo assim até consultar informações direto do fabricante.

Abraços a todos e espero que este post tenha sido útil.

 

Equipe Appunix -> O lab mais pirado do mundo geek ;P

Como forçar fila de entrega do exim (tricks) comandos úteis do exim

Standard

Abaixo descrevo uma pequena lista de comandos bem úteis do cpanel:

exim -bp —-> Este comando recebe os IDs das mensagens relevantes que você precisa enviar (na verdade as que estão na fila de emails),
exim -M IDdoEmaildaFiladeEMAILS —-> Com o id somado a este comando você envia um email em específico em caráter imediato ;).
exim -qf —-> envia a fila de emails toda,
exim -qff —-> esse comando ordena que emails congelados tenham uma ordem de envio imediato,
exim -Mvl IDdoEmaildaFiladeEMAILS —-> Vê o log da mensagem especificada pelo seu respectivo ID,
exim -Mvb IDdoEmaildaFiladeEMAILS —-> Mostra o corpo da mensagem referenciada por seu ID,
exim -Mvh IDdoEmaildaFiladeEMAILS —-> Mostra o cabeçalho da mensagem ordenada por seu ID,
exim -Mrm IDdoEmaildaFiladeEMAILS —> Remove a mensagem especificada por seu ID,
exim -Mg —> prepara mensagens para o envio usando seu ID (mensagens que falharam).

exim -v -Rff nomedodomínio.com.br —-> Esse comando faz com que o exim processe todas as mensagens de um domínio específico, neste caso nomedodomínio.com.br.

Como fazer os pacotes do ubuntu alpha ficarem mais novos (TRICKS)

Standard

Das coisas mais espantosas que podemos perceber com o Ubuntu (Debian Based) é a facilidade de atualização e manutenção geral dos pacotes que o apt-get dá.
Mas você está usando o Ubuntu em alpha testing (talvez até atualizou da 10.10 para 11.04 com do-release-upgrade -d ) e recebe continuamente a informação semelhante a esta:

A LISTA DE PACOTES OBSOLETOS… etc… etc… etc… que na verdade exige uma atualização.

Mesmo com apt-get update && apt-get upgrade -y você não obtém o pacote que deseja.
Veja bem, para conseguir isso basta fazer o seguinte:

 

apt-get dist-upgrade -y

 

Isso vai fazer com que pacotes obsoletos sejam substituídos por pacotes mais novos.

Apliquei esse comando pois no meu caso o Unity havia parado de trabalhar no começo da semana com as últimas updates lançadas.
Esse tutorial se encaixa no caso de você encontrar o seu servidor X quebrado (travando, não passando do login e coisas do tipo).

Fiquei somente triste pois o acpi parou de funcionar de novo. Vou verificar e breve faço um artigo sobre isto.

Depois foi só alegria 😉 .