Super-Python ()

Se você não se impressionam com super () nativa do Python, as chances são de que você realmente não sabe o que é capaz de fazer ou como usá-lo de forma eficaz.

Muito tem sido escrito sobre a super () e muito do que a escrita tem sido um fracasso. Este artigo visa melhorar a situação:

  • fornecimento de casos de uso prático
  • dando um modelo mental claro de como ele funciona
  • mostrando a tradecraft para fazê-la funcionar de cada vez
  • conselhos concretos para as classes de construção que usam super ()
  • favorecendo exemplos reais mais abstratas ABCD diagramas de diamante .

Os exemplos para este post estão disponíveis em Python 2 sintaxe esintaxe Python 3 .

Usando Python 3 sintaxe, vamos começar com um caso de uso básico, uma subclasse para estender um método de uma das classes embutidas:

LoggingDict classe (dict):
    def __ setitem__ (self, key, value):
        logging.info ('Configurando % r para% r '% (key, value))
        super (). __setitem__ (key, value)

Essa classe tem todos as mesmas capacidades que o seu pai, dict , mas estende-se o método __ setitem__ para fazer entradas de log sempre que uma tecla é atualizado. Depois de fazer uma entrada de log, o método usa super () para delegar o trabalho para, na verdade, a atualização do dicionário com o par chave / valor.

Antes de super () foi introduzido, teríamos hardwired a chamada com dict.__setitem__ (self, key, value) . No entanto, super () é melhor porque é uma referência indireta computadorizada.

Um benefício de engano é que não temos para especificar a classe delegado pelo nome. Se você editar o código-fonte para mudar a classe base para algum outro mapeamento, a referência super () seguirá automaticamente. Você tem uma única fonte da verdade:

LoggingDict classe (SomeOtherMapping): # nova classe base
    def __ setitem__ (self, key, value):
        logging.info ('Configurando % r para% r '% (key, value))
        super (). __setitem__ (key, value) # nenhuma mudança necessária

Além de isolar as mudanças, há um outro grande benefício para indireção computadorizada, que pode não ser familiar para as pessoas que vêm de linguagens estáticas. Uma vez que o engano é calculado em tempo de execução, temos a liberdade de influenciar o cálculo para que o engano irá apontar para alguma outra classe.

O cálculo depende tanto da classe onde é chamado de super e na árvore do exemplo dos antepassados. O primeiro componente, a classe de super onde é chamado, é determinado pelo código fonte para essa classe. No nosso exemplo, super () é chamado no LoggingDict.__setitem__método. Esse componente é fixo. A segunda e mais interessante componente é variável (que pode criar novas subclasses com uma árvore rica dos antepassados).

Vamos usar isso a nosso favor para construir um registro de dicionário ordenado sem modificar nossas classes existentes:

classe LoggingOD (LoggingDict, collections.OrderedDict):
    passar

A árvore ancestral para a nossa nova classe é: LoggingOD , LoggingDict ,OrderedDict , dict , objeto . Para os nossos propósitos, o resultado importante é que OrderedDict foi inserido após LoggingDict e antes dict !Isto significa que a chamada super () em LoggingDict.__setitem__ agora despacha a atualização de chave / valor para OrderedDict em vez de dict.

Pense nisso por um momento. Nós não alterou o código fonte paraLoggingDict . Em vez disso, construiu uma subclasse cuja única lógica é a de compor duas classes existentes e controlar a sua ordem de busca.

__________________________________________________________________________________________________________________

Ordem de pesquisa

O que eu tenho chamado a ordem de pesquisa ou árvore ancestral é oficialmente conhecido como o método de resolução Order ou MRO. É fácil ver o MRO, imprimindo o atributo __ mro__:

>>> Pprint (LoggingOD.__mro__)
(<class'__main__.LoggingOD'>,
 <class'__main__.LoggingDict'>,
 <class'collections.OrderedDict'>,
 <class'dict'>,
 <class'object'>)

Se o nosso objetivo é criar uma subclasse com uma MRO do nosso agrado, precisamos saber como ele é calculado. Os princípios são simples. A seqüência inclui a classe, suas classes base, e as classes base dessas bases e assim por diante até chegar a objeto que é a classe raiz de todas as classes. A seqüência está ordenada para que uma classe sempre aparece antes de seus pais, e se houver vários pais, eles mantêm a mesma ordem que a tupla de classes base.

A MRO mostrado acima é o fim que resulta destas restrições:

  • LoggingOD precede seus pais, LoggingDict e OrderedDict
  • LoggingDict precede OrderedDict porque LoggingOD.__bases__ é (LoggingDict, OrderedDict)
  • LoggingDict precede seu pai que é dict
  • OrderedDict precede seu pai que é dict
  • dict precede seu pai, que é objeto

O processo de resolução desses constrangimentos é conhecido como linearização. Há uma série de bons artigos sobre o assunto, mas para criar subclasses com uma MRO ao nosso gosto, só precisamos saber as duas restrições: as crianças preceder seus pais ea ordem de aparecimento no __bases__ é respeitada.

__________________________________________________________________________________________________________________

Conselhos práticos

super () está no negócio de delegar chamadas de método de alguma classe na árvore ancestral da instância. Para o método reorderable chama para trabalhar, as aulas devem ser concebidos de forma cooperativa. Este apresenta três questões práticas facilmente resolvidos:

  • o método que está sendo chamado por super () precisa existir
  • o chamador e receptor precisa ter uma assinatura argumento correspondente
  • e todas as ocorrências do método precisa usar super ()

1) Vamos primeiro olhar em estratégias para obter argumentos do chamador para coincidir com a assinatura do método chamado. Isto é um pouco mais desafiador do que chamadas de método tradicional, onde o receptor é conhecido com antecedência. Com super (), o receptor não é conhecido no momento em que uma classe é escrito (porque uma subclasse escrito mais tarde pode introduzir novas classes para o MRO).

Uma abordagem é ficar com uma assinatura fixa usando argumentos posicionais. Isso funciona bem com métodos como __ setitem__ que tiverem uma assinatura fixa de dois argumentos, uma chave e um valor.Esta técnica é apresentada na LoggingDict exemplo onde __ setitem__ tem a mesma assinatura em ambos LoggingDict e dict .

Uma abordagem mais flexível é ter todos os métodos na árvore ancestral cooperativamente projetado para aceitar argumentos e um dicionário de palavras-chave-argumentos, para remover quaisquer argumentos de que necessita, e de transmitir os argumentos restantes usando ** kwds, acabou deixando o dicionário vazio para a chamada final na cadeia.

Cada nível de tiras-off a palavra-chave argumentos de que necessita para que o dict último vazio pode ser enviado para um método que espera sem argumentos em tudo (por exemplo, object.__init__ espera sem argumentos):

classe Shape:
    def __ init__ (self, shapename, ** kwds):
        self.shapename = shapename
        super (). __init__ (** kwds)        

classe ColoredShape (Shape):
    def __ init__ (self, cor, ** kwds):
        self.color = cor
        super (). __init__ (** kwds)

cs = ColoredShape (color = 'vermelho', shapename = 'círculo')

2) Tendo olhado para as estratégias para obter os Chamador / receptor de argumentos padrões para combinar, vamos agora analisar a forma de garantir que o método de destino existe.

O exemplo acima mostra o caso mais simples. Sabemos que objeto tem um método __ init__ e que objeto é sempre a última aula na cadeia de MRO, portanto, qualquer seqüência de chamadas para super (). __init__é garantida para acabar com uma chamada para object.__init__ método.Em outras palavras, estamos garantido que está garantido o alvo da chamada super () para existir e não vai falhar com um AttributeError .

Para os casos em objeto não tem o método de juros (um método), por exemplo draw (), precisamos escrever uma classe raiz que é a garantia de ser chamado antes de objeto . A responsabilidade da classe raiz é simplesmente comer a chamada de método sem fazer uma chamada de encaminhamento usando super ().

Root.draw também pode empregar  programação defensiva  usando uma afirmação para garantir que não está mascarando algum outro empate (método mais tarde na cadeia). Isso pode acontecer se uma subclasse erroneamente incorpora uma classe que tem um método draw (), mas não herda de  Raiz .:

classe Root:
    def desenhar (self):
        # A cadeia de delegação pára aqui
        afirmam não hasattr (super (), "desenhar")

Forma de classe (Root):
    def __ init__ (self, shapename, ** kwds):
        self.shapename = shapename
        super (). __init__ (** kwds)
    def desenhar (self):
        print ('Desenho Definir forma a:.', self.shapename)
        super (). draw ()

classe ColoredShape (Shape):
    def __ init__ (self, cor, ** kwds):
        self.color = cor
        super (). __init__ (** kwds)
    def desenhar (self):
        print ('Desenho Ajuste de cores para:.', self.color )
        super (). draw ()

cs = ColoredShape (color = 'azul', shapename = 'quadrado')
cs.draw ()

Se subclasses quer injetar outras classes dentro do MRO, essas outras classes também precisa herdar de raiz , de modo que nenhum caminho para chamar draw () pode chegar a objeto sem ter sido parado porRoot.draw . Isso deve ser claramente documentados para que alguém escrevendo novas classes de cooperação vai saber a subclasse de Raiz .Esta restrição não é muito diferente do que própria exigência do Python que todas as novas exceções devem herdar BaseException .

3) As técnicas mostradas acima garantir que super () chama um método que se sabe que existe e que a assinatura será correta; no entanto, ainda estamos contando com super () ser chamado a cada passo para que a cadeia de delegado continua intacta. Isso é fácil de conseguir, se estamos projetando as classes cooperativamente – basta adicionar uma chamada super () para cada método na cadeia.

As três técnicas listadas acima fornecem os meios para projetar as classes de cooperação que podem ser compostas ou reordenados por subclasses.

__________________________________________________________________________________________________________________

Como Incorporar uma classe não-cooperativo

Ocasionalmente, uma subclasse pode querer usar várias técnicas de herança de cooperação com uma classe de terceiros que não foi projetado para isso (talvez o seu método de juros não utiliza super () ou, talvez, a classe não herda da classe raiz ). Esta situação é facilmente sanado através da criação de uma classe de adaptador que joga pelas regras.

Por exemplo, o seguinte Moveable classe não faz super () chamadas, e tem um __ init__ () assinatura que é incompatível com object.__init__ , e não herda de raiz :

classe Móvel:
    def __ init__ (self, x, y):
        self.x = x
        self.y = y
    def desenhar (self):
        print ('Desenho na posição:', self.x, self.y)

Se queremos usar essa classe com a nossa cooperativa projetadoColoredShape hierarquia, precisamos fazer um adaptador com o super requisito () chama:

MoveableAdapter classe (Raiz):
    def __ init__ (self, x, y, ** kwds):
        self.movable = móvel (x, y)
        super (). __init__ (** kwds)
    def desenhar (self):
        self.movable.draw ()
        super (). draw ()

classe MovableColoredShape (ColoredShape, MoveableAdapter):
    passar

MovableColoredShape (color = 'vermelho', shapename = "triângulo",
                    x = 10, y = 20). draw ()

__________________________________________________________________________________________________________________

Exemplo completo – Just for Fun

Em Python 2.7 e 3.2, o módulo de coleções tem tanto um contador declasse e um OrderedDict classe. Essas classes são facilmente compostas de fazer uma OrderedCounter :

de coleções importar Contador, OrderedDict

classe OrderedCounter (Contador, OrderedDict):
     'Counter que se lembra dos elementos de ordem são vistos pela primeira vez'
     def __ repr__ (self):
         return '% s (% r)'% (self.__class__.__name__,
                            OrderedDict (auto-))
     def __ reduce__ (self):
         voltar self.__class__, (OrderedDict (self),)

oc = OrderedCounter ('abracadabra')

__________________________________________________________________________________________________________________

Notas e Referências

* Quando uma subclasse builtin como dict (), muitas vezes é necessário substituir ou estender a vários métodos de uma vez. Nos exemplos acima, a extensão setitem__ __ não é usado por outros métodos, comodict.update , por isso pode ser necessário estender esses também. Esta exigência não é exclusivo para super (); ao contrário, ela surge sempre builtins são uma subclasse.

* Se uma classe se baseia em uma classe pai que precede outro (por exemplo, LoggingOD depende  LoggingDict vindo antes OrderedDict que vem antes dict ), é fácil adicionar afirmações para validar e documentar o método pretendido ordem de resolução:

posição = LoggingOD.__mro__.index
afirmar posição (LoggingDict) <posição (OrderedDict)
afirmar posição (OrderedDict) <posição (dict)

* Boas write-ups para os algoritmos de linearização pode ser encontrado na documentação do Python MRO e na Wikipedia entrada para linearização C3 .

* A linguagem de programação Dylan tem um método de próximaconstrução que funciona como super do Python (). Veja docs classe de Dylan por um breve write-up de como ele se comporta.

* A versão Python 3 de super () é usado neste post. O código-fonte de trabalho completo pode ser encontrado em:   Receita 577720 . A sintaxe Python 2 difere em que o tipo e objeto argumentos para super () são explícitas e não implícitas. Além disso, a versão Python 2 de super () só funciona com classes new-style (aquelas que explicitamente herdar deobjeto ou outro tipo embutido). O código de trabalho cheio de origem utilizando Python 2 sintaxe é a  receita

 

fonte: http://rhettinger.wordpress.com/2011/05/26/super-considered-super/

Trocou de e-mail ou vai vender o seu Android? Antes, porém, é preciso desvincular sua conta do Google do seu smartphone. A medida fará com que o aparelho deixe de fazer a integração com serviços como o Google Play e o Now. Para te ajudar, o TechTudo preparou um passo a passo com tudo o que você precisa para desvincular uma conta do Google do seu aparelho Android.

Passo 1. Acesse a aba de configurações do seu Android e procure a opção de “Contas”.

Acesso à configuração de conta do Android (Foto: Reprodução/Thiago Barros)
Acesso à configuração de conta do Android (Foto: Reprodução/Thiago Barros)

Passo 2. Toque em “Google” para ver os perfis cadastrados. Toque na que deseja apagar e depois em “remover conta”.

Removendo conta Google (Foto: Reprodução/Thiago Barros)
Removendo conta Google (Foto: Reprodução/Thiago Barros)

Passo 3. Confirme a intenção de desvinculá-la do aparelho e, pronto, você voltará para sua tela do início do passo 2 e ela não estará mais lá.

Confirmação de remoção da conta Google (Foto: Reprodução/Thiago Barros)
Confirmação de remoção da conta Google (Foto: Reprodução/Thiago Barros)

Pronto! Agora a sua conta já está desvinculada do seu Android. Isso pode ser feito para o caso de um usuário que deseja negociar o seu aparelho ou não queira mais aquele e-mail.

fonte: http://www.techtudo.com.br

Desativar as transparências do iOS 7

iOS 7 abusa dos efeitos de transparência e isso pode comprometer o sistema em aparelhos mais antigos. Se você atualizou seu gadget e está enfrentando problemas desse tipo, aprenda como desativar o recurso, para deixar seu dispositivo mais rápido. Basta seguir o tutorial preparado pelo TechTudo.

Passo 1. Acesse as configurações do iOS 7 no aplicativo “Ajustes”;

Acessando configurações do iOS 7 (Foto: Reprodução/Helito Bijora)
Tela que acessa as configurações do iOS 7 (Foto: Reprodução/Helito Bijora)

Passo 2. Na opção “Geral”, toque em “Acessibilidade”;

Tela de opções do iOS 7 no iPad (Foto: Reprodução/Helito Bijora)
Tela de opções do iOS 7 no iPad (Foto: Reprodução/Helito Bijora)

Passo 3. Toque em “Aumentar Contraste”;

Configurações de acessibilidade (Foto: Reprodução/Helito Bijora)
Display de configurações gerais para acessar o contraste do sistema (Foto: Reprodução/Helito Bijora)

Passo 4. Por fim, ative a opção “Aumentar Contraste”.

Desativando transparências do iOS 7 (Foto: Reprodução/Helito Bijora)
Opção “Aumentar Contraste” desativa as transparências do iOS 7 (Foto: Reprodução/Helito Bijora)

Dessa forma, o sistema eliminará todos os fundos transparentes, para facilitar a leitura, e deixar o desempenho do aparelho melhor.

Comandos para build.prop – Android

Nesse tutorial eu vou ensinar como:
Jogar jogos de Armv7 no seu Armv6
Aparecer mais aplicativos compatíveis com seu dispositivo no google play
Como melhorar a potência de GPU e bateria do seu celular
Como fazer seu celular ultrapassado rodar jogos como um smartphone “top”
e muito mais.

falha-pode-comprometer-usuarios-do-android

Atenção, antes de começar o post, saiba que:
1. Embora esse post seja seguro, o Eusouandroid.com não se responsabiliza por danos no seu aparelho
2. Os comandos funcionam em GB(2.3) ICS (4.0 ) e JB (4.1), e algumas stock roms também
3. Os Scripts aqui citados funcionam em qualquer celular com Android
4. Esses Scripts não são maliciosos, é muito difícil de danificar seu aparelho, mas eu recomendo que você faça backup de seu Build.prop, para sua segurança.
5. Eu demorei muito para escrever e exemplificar esse post para ficar de fácil entendimento para outrem, então LEIA TUDO, e não faça perguntas do que já está no post.
6.  Saiba que essa não será a ultima vez que o post será atualizado, eu estarei sempre atualizando e postando emuladores novos, então volte sempre a esse post para atualizar seus emuladores.

7. Os comandos podem ser colocados em qualquer lugar, do arquivo, não precisa de uma ordem especifica.

8. quando você for copiar o comando, delete  a descrição do comando depois do hífen(Exemplo abaixo, parte em vermelho á deletar

persist.cust.tel.eons=1 – Melhora o Sinal do celular

LEIA AQUI

Eu já testei praticamente todos esses comandos, e uso boa parte deles a minha rom, AKA Digdin, todos funcionam muito bem , realmente apresentam melhora, e por isso eu vou compartilhar para vocês

Esse post foi desenvolvido, devido á diversos pedidos no nosso primeiro Hangout no Google+ que ocorreu no dia 28/10/2012, então, se você tem duvidas, sugestões, criticas, ou qualquer outro assunto, entre no nossos nossos Hangouts, que serão semanais =D

Como fazer seu celular com processador ARMV6 rodar jogos de ARMV7

Bem Abra seu arquivo Build.prop na pasta System, Eu recomendo o programa Root Explorer <— Clique para baixar a versão atualizada.

Certo, se seu celular é um ARMV6, procure essas linhas no Build.prop

ro.product.cpu.abi=armeabi-v6l
ro.product.cpu.abi2=armeabi
Quando você achar troque para:
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu2.abi=armeabi

Alguns elulares ARMV5 e alguns ARMV6 vem com apenas um comando que é esse:
ro.product.cpu.abi=armeabi, se seu celular vier assim, delete essa linha e troque por essa
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu2.abi=armeabi

Reinicie o celular, e está pronto, agora seu smartphone agora iniciará jogos com arquitetura ARMV7.

Dica: Segundo a dica do nosso leitor @Fred, você terá que fazer wipe(limpar) o seu celular, não o cartão de memória, apenas fazer restauração de fabrica no seu sistema, para essa função fazer efeito.

Avisos: 1. No meu celular eu consegui rodar jogos de ARMV7 sem precisar limpar meu celular.
2. Só nesse comando de Armv7 que você precisa limpar, nos outros abaixo não precisa

Varios comandos para melhorar seu celular

Comandos para melhorar perfomance do celular (GPU)

debug.sf.hw=1
video.accelerate.hw=1
ro.opengles.version=131072
debug.performance.tuning=1

Outros comandos

persist.cust.tel.eons=1 – Melhora o Sinal do celular
ro.ril.enable.amr.wideband=1 – Melhor qualidade de voz na ligação
dalvik.vm.heapsize=48m – Melhora a velocidade de execução de aplicativos
persist.sys.scrollingcache=2 – Melhora a velocidade de rolagem
pm.sleep_mode=1 – Aumenta a duração da Bateria
wifi.supplicant_scan_interval=180 – Faz o wifi fazer menos verificações, aumentando a vida útil da sua bateria
ro.home_app_adj=1 – Faz seu launcher sempre ficar na memoria para abrir mais rápidamente
windowsmgr.max_events_per_sec=80 (é bem parecido com frames por segundo, eu recomendaria 80 mesmo.) – Melhora a perfomance do celular
persist.sys.shutdown.mode=hibernate – Melhora a vida útil da bateria

Melhorar qualidade de Vídeo e Imagem

ro.media.dec.jpeg.memcap=8000000
ro.media.enc.hprof.vid.bps=8000000

Para melhorar a velocidade de execução de vídeos em Stream(Youtube, Netflix, etc)

media.stagefright.enable-player=true
media.stagefright.enable-meta=true
media.stagefright.enable-scan=false
media.stagefright.enable-http=true

Melhorar a velocidade do 3G 

ro.ril.hsxpa=1
ro.ril.gprsclass=10
ro.ril.hep=1
ro.ril.enable.dtm=0
ro.ril.hsdpa.category=8 (or 10,12,14) Still looking for more of these though.
ro.ril.enable.a53=1
ro.ril.enable.3g.prefix=1
ro.ril.htcmaskw1.bitmask=4294967295
ro.ril.htcmaskw1=14449
ro.ril.hsupa.category=6

Comandos arriscados

Antes de lista-los, eu tenho que ressaltar que não funcionaram no meu celular, talvez no seu funcione, mas eu já quero deixar aqui o aviso, ambos fizeram efeitos reversos, então se acontecer algum erro no seu celular, é só remove-los do build.prop e reiniciar o celular que tudo volta ao normal.

persist.sys.use_dithering=1 – Melhor Qualidade de imagem
ro.kernel.android.checkjni=0 – Faz seu celular ser compatível com jogos que não eram compatíveis antes.

Melhor qualidade da camera, tanto em foto quanto em vídeo e qualidade de som *atenção, esse comando é arriscado como eu listei acima 
ro.media.capture.maxres=8m
ro.media.capture.fast.fps=4
ro.media.capture.slow.fps=120
ro.media.capture.flash=led ***May interfere with Xenon
ro.media.capture.flashMinV=3300000
ro.media.capture.torchIntensity=40
ro.media.capture.flashIntensity=70
ro.media.panorama.defres=3264×1840
ro.media.panorama.frameres=1280×720
ro.camcorder.videoModes=true

Como fazer aparecer mais aplicativos compatíveis no Google Play?

Como exemplo, eu vou usar o comando da stock rom do Sony Ericsson X10MP, bem, você vai abrir o Build.prop e encontrar esse comando aqui:

ro.build.fingerprint=SEMC/U20i_1238-0199/U20i/:2.1-update1/2.1.1.A.0.6/-X_d:user/release-keys

Agora eu vou explicar a ordem dos comandos

ro.product.brand=SEMC – Marca do celular
ro.product.name=U20i_1238-0199 – Nome do Produto
ro.product.device=U20i – Nome do aparelho
ro.build.version.release=2.1-update1 – nome da versão lançada
ro.build.id=2.1.1.A.0.6 – Numero da Versão
ro.build.version.incremental=-X_d – Detalhes avançados da versão
ro.build.tags=release-keys – Have no idea :p

Agora eu vou mostrar para vocês, como eu fiz o arquivo, na minha rom, para vocês darem uma olhada

ro.build.fingerprint=SEMC/LT15i_1247-1073/LT15i/:2.3.7/2.0/-X_d:JonnyPaes/release-keys 

Estão vendo o “LT15i” ali no comando? Ele faz meu celular U20i (X10 Mini Pro) usar o market do LT15i, e vocês podem fazer isso no seu celular/tablet também, só mudar a parte onde aparece /LT15i_1247-1073/LT15i/ para o nome do celular que você quer, você pode até usar esse comando que eu postei mesmo

Como fazer seu celular ultrapassado rodar jogos como um smartphone “top”

Para que funciona isso? Vou responder antes que perguntem, se você fizer o que eu descrever ai em baixo, seu celular vai rodar jogos como um outro, por exemplo, imagina que você tem um Galaxy 5, se você abrir o Build.prop dele e mudar essas linhas, colocando as informações do GalaxyS3, quando você reiniciar, o seu celular vai carregar os apps como se ele fosse um galaxyS3, entendeu?

Bem, para começar você vai procurar essas linhas aqui no seu Build.prop

ro.product.model=
ro.product.manufacturer=
ro.product.brand=
ro.product.name=

E vai colocar preencher, com as informações do celular que você quer que o seu simule, no caso eu escolhi o Galaxy S3, então, seu build.prop vai ficar asim.

ro.product.model=SPH-L710
ro.product.manufacturer=samsung
ro.product.brand=samsung
ro.product.name=d2spr

ah, e detalhe, você pode copiar o Fingerprint e o Armeabi da rom que você quer  simular, na verdade, eu até recomendo que você faça isso

O que eu recomendo?

Bem, depois de fazer todos esse comandos, eu recomendo você baixar os apps

TweakZV6, e fazer um overclock no seu celular (um over de pelo menos 25% da potência do seu processador, NÃO PASSE DISSO, SENÃO SEU CELULAR FALHAR NA HORA DE EXECUTAR APLICAÇÕES, OU ATÉ MESMO EXPLODIR, SÉRIO.

Fonte: http://eusouandroid.com

Host not found, try again – Postfix e vTigerCRM

Tive muitos problemas para configurar o postfix para trabalhar junto com o vtiger, no fim descobri que era apenas um um problema de nameserver.

selo-testado-14216276

 

Solução para quando o domínio não for resolvido pelo postfix:

erro

Edite o arquivo resolv.conf que se encontra em /etc/

Coloque:

nameserver 8.8.8.8 pois este é o dns padrão do google e ele se encarregará de resolver os domínios de e-mails para você.

resolv

Feito isto, copie o resolv.conf para o etc do spool do postfix:

cp /etc/resolv.conf   /var/spool/postfix/etc/

Agora: service postfix restart

service postfix reload

pronto, tudo funcionando!

Obs: também serve para quem está tendo problemas com os emails do yahoo.

Configurações feitas no sistema UBUNTU. As pastas e arquivos podem variar de acordo com o sistema operacional.